반응형

이번 문제는 <모의고사>다.
"코딩 테스트 합격자 되기 자바편" 기준으로는 4번에 해당
(문제 출처 : 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/42840)

프로그래머스는 블로그 게재시 문제 여지가 있어
자세한 내용 없이 문제 제목과 링크로 대체합니다. 

문제 설명부터 너무 나를 위한 거라 마음에 들더라?
(아무도 안 믿지만 과거의 수포자)

패턴이 정확히 있고 하니까
정답 배열이랑 비교해서 맞은 개수 카운트 하면 되겠네
하고 가볍게 시작했는데
나중에 보니 가장 많은 문제를 맞힌 사람을 숫자로 표현해줘야 했다.
그게 좀 까다롭(?)다.

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        
        int[] sa1 = {1, 2, 3, 4, 5}; // 5개
        int[] sa2 = {2, 1, 2, 3, 2, 4, 2, 5}; // 8개
        int[] sa3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; // 10개
        int[] score = new int[3]; // 점수 계산용
        ArrayList<Integer> ans = new ArrayList<>();
    
        int s1 = 0, s2 = 0, s3 = 0;
        
        for (int i=0; i<answers.length; i++){
        	// 1번 학생의 패턴인 1~5 순서대로 반복하면서 비교
            if(sa1[s1]==answers[i]) {score[0]++;}
            s1++;
            if(s1==5) {s1=0;}
            
             if(sa2[s2]==answers[i]) {score[1]++;}
            s2++;
            if(s2==8) {s2=0;}
            
             if(sa3[s3]==answers[i]) {score[2]++;}
            s3++;
            if(s3==10) {s3=0;}
        }
        
        // 가장 많이 맞춘 학생의 점수 찾기
        int max = Arrays.stream(score)
                        .max().getAsInt();
        
        // 최고점과 각 학생의 점수 비교해서, 순서찾기
        // 다 같이 점수가 동일한 경우에는 어차피 1번 학생부터 add됨
        for (int i=0; i<3; i++){
            if (max == score[i]){
                ans.add(i+1);
            }
        }
        answer = ans.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

오 책의 예시 답안을 보니 접근방법은 나랑 비슷한데, 훨씬 더 깔끔하게 풀어내셨다.

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        
        // (나랑 다른 부분) 패턴을 이렇게 2차원 배열에 넣었다.
        
        int [][] pattern ={
        	{1, 2, 3, 4, 5}, // 5개
            {2, 1, 2, 3, 2, 4, 2, 5}, // 8개
			{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; // 10개
            }
            
        // (동일) 점수 저장할 배열을 만들었다    
        int[] score = new int[3]; // 점수용
        
        // 각 수포자의 패턴과 정답이 얼마나 일치하는지를
        // for문 2개에 구성해서 표현했다.
        // 이게 핵심이니까 여기는 필요하면 책을 찾아보세요.
        
        // (동일) 가장 높은 점수를 찾고
        int max = Arrays.stream(score)
                        .max().getAsInt();
                        
        // (동일) 가장 높은 점수를 가진 사람들을 찾아서 리스트에 담는다.
        for (int i=0; i<3; i++){
            if (max == score[i]){
                ans.add(i+1);
            }
        }
        answer = ans.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

공부에 참고한 책 이름은 김희성 님의 "코딩 테스트 합격자 되기 자바편"입니다.

오늘의 챌린지 문제 2개를 풀면서 내가 느낀 것은

1. 어레이 리스트 할당하는 법과 >>  ArrayList<Integer> sums = new ArrayList<>();
2. 스트림 메서드를 활용하고 >> Arrays.stream(score).max().getAsInt();
3. 또 변환하는 법도 알아야 한다는 사실 >> sums.stream().mapToInt(Integer::intValue).toArray();

프로그래머스 레벨 1~3이랑 백준 실버까지는 풀어야 된다는데
할 수 있지 나 자신?! 

반응형
반응형

돌아온 코테 공부 시간
혼자서 하려니 의욕이 나지 않더라구요
그래서 찾아보니 많은 분들이 책을 보면서 하고 계셨다.
서칭해서 가장 많이 나온 건 한빛 미디어의 이것이 시리즈 중
"이것이 취업을 위한 코딩 테스트다 with 파이썬" by 나동빈이었다.
일단 나는 자바로 하기로 결심했는데 얘는 파이썬이고...
게다가 전자책 따로 사기도 도서관에서 빌리기도 귀찮아서
밀리의 서재에 들어가서 검색해봤더니 책이 꽤나 많았다.

"코딩 테스트 합격자 되기 자바편" by 김희성을 골랐다.
심지어 프로그래머스에서 제공하는 97문제나 풀어볼 수 있음!

"코딩 테스트 합격자 되기 자바편"은
책 초반에 코테를 효율적으로 분석하는 법을 먼저 알려준다.
나는 N년 전에 코테 처음 시험 볼 때도 지금도... 냅다 풀었는데 그게 아니구나^^!
1. 문제를 쪼개서 분석하라
2. 제약사항을 파악하고 나만의 테스트케이스를 추가해라
3. 입력값을 분석하라
4. 의사코드로 설계하는 연습을 해라
5. 시간 복잡도도 고려해라
대충 위와 같은 내용들인데 괜찮은 것 같다.

그리고 나서 배열, 스택과 같이 자료구조 순서대로
개념과 정의, 알아야 할 내용 등을 설명해준다.
자료구조별로 몸풀기 문제가 있는데
풀면서 유의해야 할 점들 같은 내용들도 같이 소개해준다
그리고 그 다음이 합격자가 되는 모의 테스트라고 해서,
문제를 4-5개씩 풀어볼 수 있게 해두었더라.

내용도 구성도 괜찮다고 생각해
하루에 2-3개 정도를 풀면서
까먹은 자바도 상기하고
알고리즘도 익히고 문제도 풀 계획을 세웠다.

알다시피 그렇게 꾸준 인간은 아니고
작심삼일 n번 모으기와 벼락치기로 이루어진 인간이라...
하는데까지 해보겠다.

각설하고 오늘은
"코딩 테스트 합격자 되기 자바편" 도서 기준으로는 3번이고,
프로그래머스 기준으론 월간 코드 챌린지 시즌 1에 해당하는 문제
<두 개 뽑아서 더하기> 이다.
(문제 출처 : 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/68644?)

프로그래머스는 블로그 게재시 문제 여지가 있어
자세한 내용 없이 문제 제목과 링크로 대체합니다. 

책에서는 문제풀이 권장 시간과 시간 복잡도도 알려준다.
이 문제는 권장 풀이 시간은 30분이고
시간 복잡도는 O(N^2 log(N^2)) 이다.

하지만 최대 데이터 개수가 100개라
시간 복잡도를 굳이 따지지 않아도 될 문제같다.

내 작성코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = {};
        
        // 그냥 Array는 개수를 지정해줘야 하는데
        // 결과값이 몇 개가 나올지 모르니까
        // 자바에서 크기가 동적으로 변경되는 ArrayList를 활용했다
        ArrayList<Integer> sums = new ArrayList<>();
        
        int x = 0;
        // 두 수를 선택하는 모든 경우의 수를 반복해서
        for (int i=0; i<numbers.length; i++){
            for (int j=i+1; j<numbers.length; j++){
                x = numbers[i]+numbers[j];
                // 더한 결과가 중복 없이 1번만 저장되도록 비교
                if (!sums.contains(x)){
                    sums.add(x);}             
            }
        }
        // ArrayList의 모든 데이터 정렬
        Collections.sort(sums);
        
        // int형 배열로 변경 후 반환한다
        answer = sums.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}

책은 중복값이 저장되지 않는 해시셋Hashset 으로 풀었더라

 

반응형
반응형

대학 때 인공지능의 이해 같은 수업도 들었지만
요즘 세상 바뀌는 속도를 전혀 따라가지 못하는...
거의 좀비에 가까운 전공자인데

최근 어디 시험 보러 갈 일이 있었는데
내가 인공지능 관련 문제를 하나도 모르더라?
용어 자체도 낯설기까지 했음

상당히 충격을 먹고 반성하는 의미로
급하게 인공지능 지식을 하나둘 쌓아보고자 책을 읽었습니다.

무려 책 제목은 <비전공자도 이해할 수 있는 AI 지식>이다.

출처 : 네이버 검색


인공지능이 발전하는 과정과 기술이 어떻게 작동하는지를
이해하기 편하게 쉽고 간단하게 설명해 주는 책이었다.
(알고 보니 지은이가 현차 인공지능 기술 리더셨음)

아무튼, 한두 번은 더 읽고 필요한 부분은 따로 더 공부를 해야겠지만
이 책에서 다루는 수많은 내용들 중 서너 가지만 뽑아서 정리해보려 한다.

우선 목차는 다음과 같다

<목차>
제1장. 인공지능 | 위대한 인공지능, 깨어나다
제2장. 알파고 | 인간을 능가하는 기계의 등장
제3장. 자율주행 | 테슬라가 꿈꾸는 기계
제4장. 검색엔진 | 구글이 세상을 검색하는 법
제5장. 스마트 스피커 | 시리는 쓸모 있는 비서가 될 수 있을까
제6장. 기계번역 | 외국어를 몰라도 파파고만 있다면
제7장. 챗봇 | 챗GPT, 1분 안에 보고서 작성해 줘
제8장. 내비게이션 | 티맵은 어떻게 가장 빠른 길을 알까
제9장. 추천 알고리즘 | 알 수 없는 유튜브 알고리즘이 여기로 이끌다

그중에서도 내가 리뷰하고 싶은 부분은
1장 인공지능, 2장 알파고, 3장 자율주행, 그리고 6장 기계번역이다.
아래에 이어지는 내용은 책을 보면서 정리한 것임을 미리 밝혀둡니다
(아주 간혹 내 생각이나 추가 공부한 내용 포함될지도)

1장 인공지능

  • 모라벡의 역설(Moravec’s Paradox)이라는 말이 있다. "어려운 것은 쉽고, 쉬운 것은 어렵다"
    우리에게는 간단한 것일지라도 인공지능에게는 어려울 수도 있다는 의미기도 하다고 한다.
  • 1956년 다트머스대학교에서 지능을 가진 기계를 주제로 한 학술대회가 열렸다. 이곳에서 처음으로 인공지능이라는 용어 고안하고 사용했다.
  • 뒤이어 1958년 인간의 두뇌 구조를 본뜬 인공 신경망 모델도 등장한다. 인공 신경망의 초기 모델을 퍼셉트론Perceptron이라고 하는데, 인간 두뇌가 뉴런이 서로 연결된 상태로 전기신호를 내보내며 정보를 전달한다는데서 착안했다. 비슷한 형태로 인공 뉴런이 연결된 구조의 인공 신경망 구현하게 된 것이다. 기대감이 상당했으나 쓰임새를 찾지 못해 잊힌 기술이 되어버린다.
  • 대신 인공지능 초창기에는 if-then 규칙을 기반으로 하는 인공지능이 우세했다. 겉보기에 결과물이 인공 신경망에 비해 훨씬 괜찮았기 때문이다. 하지만 규칙을 기반으로 해 한계가 분명했기 때문에 이것마저 시들해졌다.
    (이때부터 한동안을 우리 교수님도 말씀하셨던 인공지능의 암흑기라고 하는 듯)
  • 1980년대 머신러닝(기계학습) 알고리즘 등장한다. 컴퓨터가 스스로 규칙을 찾아낼 수 있게 된 것이다.
    하지만 일부 연구자들만 취급하는 주제였는데, 2010년대 들어 이미지 인식 분야에 도입되면서 다시 빛을 발하게 된다.
  • 2012년 이미지넷 대회에서 토론토대학교의 제프리 힌튼 교수팀이 사용한, 컨볼루션 기법을 사용한 딥러닝으로 인공지능의 시대가 부활한다. 딥러닝은 머신러닝의 일종으로, 데이터와 정답을 입력하면 스스로 규칙을 찾아낸다는 점에서 비슷하게 작동한다.
    그러나 딥러닝은 훨씬 더 많은 데이터를 학습하고, 훨씬 더 많은 규칙을 찾아낼 수 있다. 특히나 딥러닝이 돋보이는 분야가 바로 기계번역이다.
  • 인공지능의 폭발적인 성장을 견인한 데는 GPU의 사용이 한몫함 GPU는 상대적으로 성능이 떨어지는 코어를 엄청나게 많이 꽂아둔 형태다. 그래서 각각의 성능은 좀 떨어지더라도 전체 작업을 빠르게 처리할 수 있다 = 병렬연산에 강하다. 하나하나는 빠르지 않더라도 많은 작업을 동시에 진행해 결과적으로는 더 빨리 처리할 수 있는 것.
  • 특히나 엔비디아는 CUDA(Compute Unified Device Architectures) 플랫폼을 통해 GPU를 활용할 수 있는 방법을 계속해서 모색하고, GPU 사용을 적극 지원하고 있었기에, 엔비디아의 지금과 같은 독점 체제가 형성될 수 있었다.
    오늘 뉴스레터 보니까 엔비디아가 "AI 시장에서 독보적인 존재감"을 드러내고 있다고 하는데, 그 시작점이 쿠다인 거네.
    특히나 현재 엔비디아의 GPU는 시장점유율 90% 정도로, 대규모 언어 모델(LLM)과 생성형 AI 기술 개발에 있어 대체 불가능한 핵심 요소라고 한다.

2장 알파고

  • 모든 경로를 탐색하는 것을 완전 탐색이라고 한다. 하지만 효율적인 탐색을 위해, 성과가 없으면 더 이상 탐색하지 않고 넘어갈 수 있다. 이를 컴퓨터 과학에서는 가지치기(Pruning) 한다고 표현하는데, 나뭇가지 자르듯 쳐내버리고 다시는 탐색하지 않는 것이다.
  • 도박처럼 확률적인 방법으로 결과를 유추해 내는 방식을 몬테카를로 방법이라고 한다. 계속 도전하면 결국은 원래 확률만큼의 결과를 얻을 수 있는데 이런 식으로 값을 계산하는 알고리즘이다. 여러 번의 무작위 실험으로 결과를 관찰하는 편이 더 실용적이다란 생각에서 출발했다고.
    2006년부터는 게임 트리 탐색에 몬테카를로 방법을 접목한 몬테카를로 트리 탐색 알고리즘을 고안했다. 이를 바둑 인공지능에 적용, 실력 급상승하는 결과를 가져왔다.
  • 알파고에 적용된 두 종류의 인공 신경망 = 정책망과 가치망.
    정책망은 다시 3가지로 나뉘어, 알파고에는 총 4가지 신경망이 사용되었다.
    (정책망) 사람이 만든 기보 중 6단 이상을 모아 학습한 기보학습 정책망 + 전자보다 훨씬 작고 가벼운 롤아웃 정책망 + 알파고가 스스로 대국하며 강화학습을 수행한 강화학습 정책망
    (가치망) 현재 국면에서 승패 여부를 예측하는 망. 정책망끼리의 대국에서 장면을 추출해 내, 현재 대국에서 승패 확률을 계산해 내는 망

3장 자율주행

  • 베이즈 정리 >> 확률은 믿음에 불과(?)할 뿐이며 세상에 절대 원칙이란 존재하지 않으므로, 무엇이든 조심스럽게 관찰하며 의심해야 한다. 믿음을 업데이트해나가는 원리다.
    자율주행차 역시 새로운 신호가 들어올 때마다 기존의 믿음을 새로운 믿음으로 끊임없이 업데이트한다. 레이더/라이더/카메라와 같은 장치와 여러 센서들을 통해 주행 환경과 외부 정보를 계속해서 업데이트해나가면서 안전하게 주행가능한 길을 찾아내는 원리라는 의미.
  • 컨볼루션 신경망은 동물이 이미지를 판별할 때 사물 전체를 한 번에 보는 대신 부분으로 조각내어 살펴보는 것과 비슷함. 복잡한 이미지를 단순한 선과 모서리로 해체하고, 조각난 부분을 살피면서 필터링해 결과를 내보냄. 결국 여러 번 필터링한 결과를 인공 신경망의 뉴런을 거쳐 최종 결과로 추출한다.
  • 자율주행은 기술 수준에 따라 5단계로 나뉜다. 미국 자동차 공학회(SAE)가 정의함
    0단계 자율주행 기능 없음
    1단계 운전자 지원 >> 발 떼기 : 크루즈 컨트롤, 충돌 경고, 비상 제동 가능
    2단계 부분 자율주행 >> 손 떼기 : 조향&속도 자동화 제어 가능
    3단계 조건부 자율주행 >> 눈 감기 : 부분 자율주행 가능. 시스템 요청 시에 일정시간 이내 운전자가 즉각 개입할 수 있어야 함
    4단계 고도 자율주행 >> 뇌 끄기 : 고급 자율주행 가능. 지정된 영역을 벗어나거나 특수한 상황에서는 운전자의 개입 필요
    5단계  완전 자율주행 >> 인간 개입 전혀 필요 없음.

출처 : 현대 트랜시스 블로그 (https://blog.hyundai-transys.com/249)

  • 완전자율주행이래도 인간이 필요한 순간이 올 텐데 그때 능숙하지 않은 운전자가 있다면? 의 문제와
    유명한 윤리학 실험인 광차문제가 아직 남아 있음. 광차문제는 철도 선로에 각각 1명과 5명이 있을 때 어느 쪽을 희생시키는 것이 옳냐는 의문

6장 기계번역

  • 규칙 기반 > 예시 기반 > 통계 기반 > 신경망 기반 순으로 발전함
  • 신경망 기반은 문장을 통째로 압축해 숫자로 표현한 벡터를 만든다. 그리고 이 값으로 다시 번역문을 찾아낸다.
    문장을 압축하는 과정에서는 문장을 띄어쓰기 단위로 구분한다. 그리고 차례대로 인공 신경망을 통과하여 핵심적인 특징을 추출한다. 여러 번 계산을 통해 최종적으로 문장 전체의 의미를 압축한 벡터가 나오게 되는데, 이 과정을 수행하는 부분을 인코더라고 한다.
  • 반대로 문장을 푸는 부분은 디코더라고 한다. 압축된 벡터를 받아서 순서대로 풀어내는 역할이다.
    한 단어씩 차례대로 푸는데, 이때 앞선 단어의 번역 + 인코더가 압축한 벡터를 받는다.
    문장 번역이 끝날 때까지, 디코더는 계속해서 인코더가 압축한 벡터를 참조하면서 보다 자연스러운 문장을 만들어낸다.
  • 하지만 이 방식은 원문의 길이에 상관없이 일정한 길이의 벡터로 1번만 압축한다는 단점 + 번역문이 길어질수록 핵심 단어를 놓친다는 단점이 존재한다.
  • 이 방식을 해결하고자, 보다 중요한 단어를 강조하는 원리인 어텐션Attention이 등장한다.
    어텐션은 번역문의 단어를 생성할 때마다 출력 문장 길이에 맞춰 압축 벡터를 생성한다. 그래서 장문 번역에 용이해짐.
    그리고 중요한 단어에는 별도의 가중치를 부여한다. 이로 인해 번역문이 길더라도 번역의 정확성은 지키게 된다. 핵심 단어가 강조되니까.
  • 아예 어텐션으로만 인공 신경망을 구성한 논문이 있음. 논문 이름도 <Attention is all you need>인데, 여기서 딥러닝 모델 트랜스포머가 등장한다.
    (트랜스포머의 구조) 인코더는 입력 문장을 압축하여 핵심적인 특징을 추출하는 역할을 맡고, 디코더는 인코더가 압축한 벡터를 받아와 출력 문장을 생성함. 인코더는 한 종류의 어텐션, 디코더는 두 종류의 어텐션으로 구성됨.
  • 기계번역에서 인코더가 문장의 의미를 압축해 낼 수 있다는데서 착안해 자연어 이해 모델인 버트BERT가, 디코더가 문장을 생성하는데서 착안해 자연어 생성 모델인 GPT-3가 등장했다.

출처 : 현재 소개 중인 AI 지식 도서

내가 더 자세히 공부해야 할 부분은 기계번역과 챗봇이다.

누구든 인공지능 교양서나 입문서가 필요하다면 추천한다.

반응형
반응형

토익 응시 후 2년이 되었습니다. 토익으로 고통받는 자들은 고개를 들어주세요. 🙇‍♀️🙆‍♀️
이번에도 믿고 보는 산타 토익 하려고 홈페이지에 들어가 봤다. 근데 환급반 개념이 달라져 있었다.
포인트 제도가 생겨 일정 포인트까지 쌓고 그 이후에 초과되는 부분을 돌려주는 형태였다.
오 나쁘지 않은데? 공부한만큼 돌려받는 거네~
근데 조건을 읽다 보니 함정이 있더라?
돌려받으려면 상품 판매가의 30% 이상 쌓아야 하고, 후기 작성 등으로 얻을 수 있는 보너스 포인트까지 받으려면 15만 점이 넘어야 한다.
15만 점...? 하루에 출석해서 공부하는 걸로는 190점+알파가 쌓이는데, 30일 동안 매일 한대도 하루에 5천 점은 쌓아야 한다.
포인트 모으기가 꽤 까다로워 보이던데? 산타… 당신들 주기 싫으면 싫다고 말로 해요;;; 
짧고 굵게 공부하고 치워버리려는 나에게는 무리라고 판단, 그래서 쿨하게 환급은 포기하고 다른 상품을 알아보았다. 

알아보던 당시에는 상품 캡처해 둔 게 없다... 최근(올해 3월 기준) 올라와 있는 상품들을 보여드립니다.
사실 30일에 5~6만 원 가격대면 충분하지 않을까 싶었는데, 30일 이용권에는 할인쿠폰이 안 먹히더라^_^

그래서 30% 할인쿠폰 적용 가능한 다른 상품들을 보다 보니, 아예 180일에 에어팟을 주는 상품이 있었다.

가격은 30만 9천 원인데, 쿠폰 최대 5만 원 적용하면 25만 9천 원.
에어팟 3세대 맥세이프 모델이 공홈 기준 26.9인데요? 그냥 새 에어팟 돈 주고 사는데 토익 공부도 시켜주는 기분?
에어팟이 필요 없는 분이라면 당* 혹은 중*나라에 판매해도 된다. 시세가 20~22만 원 사이였음.
그럼 거의 한 달에 1~2만 원으로 공부하는 사람 아니냐고요.
(는 이게 바로 나였음. 에어팟 결국 팔아서 5만 원 돈에 공부한 사람 함
토익 문제집 사고 강의 듣고 하면 5만원 훌쩍 넘지 않나요
아무리 생각해도 산타가 더 이득이에요 아무도 안시킨 홍보대사)

이건 상품 상세 페이지를 더 살펴볼 필요조차 없었다. 산타 좋은 거야 저는 이미 알고 있으니까요^^

그렇게 바로 결제를 갈겼고, 네이버페이로 결제해서 포인트 적립까지 했다. 그래서 체감 결제가는 25만 4천 원 정도...?
(상품명에 24년 3월 얼리버드 보이시나요? 제가 이 글을 다시 열어본 시점이... 12월이에요 너무 늦은 후기 죄삼다^^;;)


이 글을 보시는 분들은 꼭 추천 코드 받아서 20% 할인받으세요 💙코드 HO73SZ💙
바로 적용하시려면 💙 쿠폰 적용 링크 💙 눌러주세요
저는 이미 10명 넘게 추천을 해주셔서 사용하셔도 저는 혜택을 받지 못한답니다
하지만 이 글을 읽으시는 분들은 할인받으시길 바라며 남겨봅니다,,,

추천 코드 등록 방법은
1) 내 정보 > 쿠폰함에 추천 코드 입력하기
2) 상품 구매 시 쿠폰 사용하기 순입니다.


계속해서 제가 산타에 마음에 들었던 부분들 소개해볼게요
이렇게 미니(30제), 하트(100제), 풀(200제) 모의고사가 있어서 내 실력 측정해 보기 좋아요.

복습 퀴즈에서 내가 틀린 거, 맞은 거 필터링도 해가면서 복습할 수도 있다죠

내가 취약한 부분들도 알려준다. 저기만 집중해서 문제풀이 하면서 조질 수도 있다.
저는 역시나 보통의 한국인이라 파트 5가 제일 취약한데요. (문법 싫어 인간)

근데 이번에 오래간만에 공부하다 보니까 문제 하나 풀 때마다 이렇게 내 수준 대비 난이도를 알려주더라?
근데 문구가 살짝 킹 받아서 모아봤음... 내 수준이 먼데!!!!!

이외에는... 올해 초에 약 1달 가량 밖에 산타를 안 써서 기억은 가물한데요.
2년 전에 제가 이런 점 개선되었으면 한다 했던 것들 중에 꽤나 많은 부분이 바뀌어있는 것 같더라구요.
당시 전화로 짧게 인터뷰 같은 것도 했었는데, 정말 서비스 개선에 진심이신 분들이라고 생각한다.
나는 토익 공부할 때마다 산타 쓸 거니까 꼭 오래오래 서비스해주세요ㅠㅠ!

이렇게 산타로 열심히 공부한 덕에 965라는 만족스러운 점수로 아무튼 이번 토익도 졸업합니다.
근데 180일짜리 사놓고 한 1달... 1달 반 밖에 안 했다. 갑자기 쩜 아깝...
암튼 토스...도 여행 다녀와서 땄는데 그건 조금 부족함... ETS에서 할인쿠폰 줘서 재시도할까 고민 중이다.
그건 차차 준비해서 또 후기를 남겨볼게요.

언제인지는 모르겠는데 내 공부의 흔적인 보유 포인트 현황이다.
하루에 1200~1500이면 많이 쌓는 편이었던 거 같은데 5000점 어케 채워...
역시 포인트 환급반 안 하길 잘했지

반응형
반응형

올 한 해 공부를 너무 하지 않은 죄로...
필기를 N번이나 봤는데 전부 필탈 했다죠 실화냐
물론 점수차가 동점차(^^)부터 최대 3점까지긴 했지만
어찌 되었든 처참한 결과에 충격을 금치 못했고...
반성의 의미로 여러 가지 활동을 하면서
공부하려고 스스로를 옥죄는 중입니다.

그중 하나가 바로 한빛미디어의 혼공학습단!

뭐 하는 거냐면...
한빛미디어의 전공 서적 중 하나를 골라서
한 주간 공부하고 정리한 내용을 공부하는 건데요
주 1회씩 총 6주 동안 진행합니다

요약하자면 6주 동안 책 1권 뿌시기!

책은 한빛미디어의 혼자 공부하는 시리즈 중에서
자기가 공부하고 싶은 걸 1권 선택하면 된답니다.
프로그래밍 언어부터 컴퓨터 과학이나
데이터 분석이랑 머신러닝까지 분야가 매우 다양해요

혼공학습단 활동은 이렇게 할 거래요
1) 도서별 커리큘럼에 따라 공부하고 주어진 숙제 풀기
2) 한 주간 공부한 내용과 숙제를 정리하여 블로그, 노션 등 원하는 채널에 업로드
3) 패들렛에 블로그 링크 공유하고 함께 보기

도서별 커리큘럼은 이런 식으로 제공되는데요
혼자서 책 한 권 읽기 힘든데 너무 친절하고 좋다고 생각합니더...
유튜브에 강의 목록도 따로 정의되어 있더라구요

혼공학습단 활동으로 얻는 혜택은
1) 책 1권을 스스로 공부하고 얻는 지식과
2) 내가 해냈다는 뿌듯함과 자기만족(?)

그리고 6주를 무사히 마친다면
3) 한빛 마일리지 20,000점 획득

열심히 공부한다면
4) 여러 간식까지~!~!

혼자 공부하는데 이렇게까지 해준다?!
그래서 바로 신청 갈겼다
사실 욕심이 많은 자라 두 권 하고 싶었는데
신청서 페이지에서 극구 말리시더라,,,
13기 하구 14기도 해야지~

궁금해하실 13기 활동 기간은
25년 1월 6일부터 2월 23일까지 6주간이다.

13기 신청은 12월 29일까지만 받고 있다
관심 있으면 달려가세요

그림을 누르면 혼공학습단 모집글로 이동합니다

13기 참여 예고라고 적었는데
참여 대상자 발표는 사실 12월 31일임^^7
시크릿이라고 들어보셨나요
말하면 사실될일 뽑아조요

반응형
반응형
    • 데이터 사이언티스트의 역량, 분석기획을 위해 필요한 3가지 역량
      • 수학/통계학적 지식
      • 정보 기술
      • 해당 비즈니스에 대한 이해와 전문성
  • 분석 대상과 방법
    대상 ➡️
    방법⬇️
    Known Un Known
    Known 최적화
    Optimization
    통찰
    Insight
    Un Known 솔루션
    Solution
    발견
    Discovery
  • 분석 기획 방안 
    과제중심적 접근 방식   장기적 마스터플랜 방식
    빠르게&테스트 1차 목표 정확성&개발
    단기&성과 과제 유형 장기
    문제 해결 접근 방식 문제 정의
  • 분석 기획 시 고려사항
    • 가용 데이터인가?
    • 적절한 활용방안과 유스 케이스 탐색
    • 장애요소에 대한 사전계획 수립
        >> 장애요소 : 비용대비 효과의 적절한 비용, 분석 모형의 안정적 확보, 조직 역량으로 내재화를 위한 변화 관리
  • 합리적인 의사 결정을 방해하는 요소 : 고정관념, 편향된 생각, 프레이밍 효과(동일 상황에도 주변에 따라 개인의 판단, 결정이 달라짐)
  • 방법론의 적용 업무 특성에 따른 모델
    • 폭포수 모델 : 단계를 순차적으로 진행, 이전 단계가 완료되어야 다음 단계로 진행
    • 프로토타입 모델 : 폭포수 모델 단점 보완, 일부분 우선 개발하여 시험 사용 후 개선 작업
    • 나선형 모델 : 반복을 통한 점증적 개발, 처음 시도 프로젝트에 용이하나 복잡도 상승
  • KDD 분석 방법론과 절차 전처리 과정에서 이상값 잡음을 식별하고, 데이터 변환 과정에서 분석 목적에 맞는 변수 선택 및 차원축소 과정을 거친다.
    • 데이터 선택 : 비즈니스 도메인에 대한 이해, 프로젝트 목표 설정, 목표 데이터 구성
    • 데이터 전처리 : 잡음, 이상치, 결측치 정제하는 단계
    • 데이터 변환 : 변수 생성, 데이터를 학습용/검증용 데이터로 분리
    • 데이터 마이닝 : 분석 목적에 맞는 데이터 마이닝 기법 선택, 실행
    • 데이터 마이닝 평가 : 결과에 대한 해석과 평가, 분석 목적과의 일치성 확인
  • CRISP-DM 분석 방법론과 절차 CRISP-DM에서의 데이터 준비 과정은 KDD 분석에서 데이터 변환 과정과 유사 모델링 단계에서 모델 평가는 수행하지만, 모델 적용성 평가는 그 다음 단계에서 진행
    • 업무이해 : 업무 목적과 데이터 마이닝 목적 수립, 프로세스 초기 계획
    • 데이터 이해 = 데이터 선택, 데이터 전처리 : 데이터 수집, 데이터 품질, 인사이트 발견
    • 데이터 준비 = 데이터 변환 : 수집된 데이터 중 분석기법에 적합한 데이터 편성
    • 모델링 = 데이터 마이닝 : 모델링 기법, 알고리즘 선택, 파라미터 최적화
    • 평가 = 데이터 마이닝 평가 : 분석결과, 모델링 과정과 모델 적용성 평가
    • 전개 : 실무적용, 유지와 보수, 종료 보고서 작성
  • 빅데이터 분석 방법론과 절차
    • 빅데이터 분석의 계층적 프로세스 : 단계_Phase, 태스크_Task, 스텝_Step
    • 데이터 분석에서 데이터 준비 단계로 돌아갈 수 있음

  • 지도학습과 비지도학습
    • (지도 학습)
      • 명확한 목적 하에 데이터 분석 실시
      • 자료가 입력 변수와 출력 변수로 주어짐, 예측 모형을 얻을 때 사용
    • (비지도 학습)
      • 데이터 자체의 결합, 연관성을 중심으로 데이터의 상태를 표현
      • 데이터 마이닝에서 자료가 출력변수 없이 입력변수만 주어지는 경우
  • 하향식 접근법
    • 문제가 주어지고 이에 대한 해법을 찾기 위해 각 과정이 체계적으로 단계화되어 수행하는 분석과제 발굴 방식(지도학습, WHY 관점)
    • 과정 : 문제탐색→ 문제정의→ 해결방안 탐색→ 타당성 검토
    • 문제 탐색 : 비즈니스 모델 기반 문제 탐색 → 비즈니스 모델 캔버스 활용한 과제 발굴 방법 5가지 = 규제&감사, 업무, 제품, 고객, 지원 인프라
    • 타당성 검토
      • 경제적 타당성 : 비용대비 편익 분석 관점의 접근 필요
      • 데이터 타당성 : 데이터 존재 여부
      • 기술적 타당성 : 역량 확보 방안을 사전에 수립, 분석역량
  • 상향식 접근법
    • 문제의 정의 자체가 어려운 경우, 데이터를 기반으로 문제 탐색(비지도학습, WHAT 관점)
    • 디자인 사고 : 상향식 접근 방식의 발산과 하향식 접근 방식의 수렴 단계를 반복적으로 수행
  • 프로토타이핑 접근법
    • 데이터를 정확히 규정하기 어렵고, 데이터 소스를 명확히 파악하기 어려운 상황에서, 일단 분석을 시도해보고 그 결과를 확인해 반복적으로 개선해나가는 방법
    • 필요성 : 문제 정의가 불명확할 때 이해하고 구체화하는데 도움
  • 분석과제 관리를 위한 5가지 주요 영역
    • 데이터 크기 : 분석하고자 하는 데이터의 양(크기)
    • 데이터 복잡성 : 잘 적용될 수 있는 분석 모델의 선정. ex)BI/비정형데이터
    • 분석속도 : 시나리오 측면에서의 속도성
    • 분석정확도와 복잡도 : 해석이 가능하면서도 정확도를 올릴 수 있는 최적의 모델
    • 신뢰도와 타당성 : 모델과 실제값 차이가 적은 정확도, 지속 반복했을 때 편차수준으로 일관성
      >> 분석 복잡도에서 정확도와 복잡도는 trade off 관계가 존재한다.
  • 분석 프로젝트 관리방안 10가지 ⇒ 범위, 통합, 이해관계자, 조달, 리스크, 품질, 시간, 원가, 의사소통, 지원
  • 분석 마스터 플랜 수립
    • 우선순위 고려요소 : 전략적 중요도, 비즈니스 성과/ROI(투자자본수익률), 실행 용이성
    • 적용범위/방식 고려요소 : 업무 내재화 적용 수준, 분석 데이터 적용 수준, 기술 적용 수준
    • ISP : 정보기술 또는 정보 시스템을 전략적으로 활용하기 위해 중장기 마스터 플랜 수립하는 절차
  • [일반적인 IT 프로젝트 우선순위 평가 예시]
    - 전략적 중요도 = 전략적 필요성 + 시급성
      > 전략적 필요성 : 전략 목표 및 본원 업무에 직접적인 연관관계가 밀접한 정도. 이슈 미해결시 발생할 위험 및 손실에 대한 정도
      > 시급성 : 사용자 요구사항, 업무 능률향상을 위해 시급히 수행되어야 하는 정도. 향후 경쟁우위 확보를 위한 중요도.
    - 실행 용이성 = 투자 용이성 + 기술 용이성
      > 투자 용이성 : 기간 및 인력 투입 용이성. 비용 및 투자예산 확보 가능성
      > 기술 용이성 : 적용 기술 안전성 검증 정도. 응용시스템, 하드웨어 유지보수 용이성. 개발 스킬 성숙도 및 신기술 적용성.
  • [빅데이터 특징을 고려한 분석 ROI 요소]
    - 투자비용 요소(Investment) = Volume + Variety + Velocity (3V)
    - 비즈니스 효과(Return) = Value
  • [ROI를 활용한 우선순위 평가 기준]
    1) 시급성 : 전략적 중요도, 목표가치(KPI) << Value : 비즈니스 효과
    2) 난이도 : 데이터 획득/저장/가공 비용, 분석 적용 비용, 분석 수준 << Volume + Variety + Velocity : 투자비용 요소
  • 데이터 분석과제 추진시 고려해야 하는 우선순위 평가기준
    • 시급성 : 전략적 중요도가 핵심. 현재관점 or 미래관점 어디에 둘 것인지. 분석 과제의 목표가치(KPI) 고려.
    • 난이도 : 현 시점에서 바로 적용하기 쉬운지, 어려운지 판단 기준으로써 데이터 분석의 적합성 여부를 봄
  • 포트폴리오 사분면 분석을 통한 과제 우선순위 산정

출처 : 2023 이지패스 adsp 도서

  • 분석 마스터 플랜 세부 이행 계획 수립 : 폭포수 방식도 있으나 반복적인 정련 과정을 통하여 프로젝트의 완성도를 높이는 방식 주로 사용. 모델링 단계를 중점적, 반복적으로 수행하는 혼합형을 많이 적용한다
  • 분석 거버넌스 구성요소
    • 조직
    • 프로세스
    • 시스템
    • 데이터
    • 분석 관련 교육 및 마인드 육성 체계
  • 데이터 분석수준 진단
    • 분석준비도 : 6가지로 파악
      • 분석업무파악(예측, 최적화 분석 업무)
      • 이력 및 조직
      • 분석기법
      • 분석 데이터(기준 데이터 관리 MDM)
      • 분석문화
      • IT인프라
    • 분석성숙도 : 조직의 성숙도 평가 CMMI, 성숙도 수준 분류
      • 도입 : 분석 시작하여 환경과 시스템 구축
      • 활용 : 분석 결과 실제 업무에 적용
      • 확산 : 분석을 관리하고 공유
      • 최적화 : 분석 진화시켜 혁신 및 성과 향상에 기여
    • 분석 수준 진단 결과 4분면

출처 네이버 블로그 jdhpuppy님

  • 데이터 거버넌스 : 전사 차원의 모든 데이터에 대해 표준화된 관리체계를 수립하고 운영을 위한 프레임워크 및 저장소를 구축하는 것을 말한다.
    • 데이터 표준화 : 데이터 표준용어 설정, 메타데이터 구축, 데이터 사전 정의 등의 업무로 구성
    • 데이터 관리체계 : 표준 데이터를 포함한 메타데이터와 데이터 사전의 관리 원칙 수립, 데이터 생명주기 관리방안을 수립해야 함
    • 데이터 저장소 관리 : 메타데이터 및 표준데이터를 관리하기 위한 전사 차원 저장소 관리 체계 지원을 위한 워크플로우 지원, 통제
    • 표준화 활동 : 표준 준수 여부를 주기적으로 모니터링
  • 분석을 위한 3가지 조직구조
    • 집중구조 : 전사 분석 업무를 별도의 분석 전담 조직에서 담당(이원화)
    • 기능구조 : 별도의 분석 조직이 없고 해당 업무 부서에서 진행
    • 분산구조 : 분석 조직 인력들을 현업 부서에 직접 배치하여 분석업무 수행
  • 분석과제 관리 프로세스 수립
    • 과제 발굴 : 개별 조직이나 개인이 도출한 분석 아이디어를 발굴하고 이를 과제화하여 분석과제 풀로 관리, 분석과제 후보 제안
    • 과제 수행 : 분석을 구성할 팀 구성, 분석과제를 실행하고 진행관리, 결과공유/개선
    • 분석과제 후보 제안, 결과 공유 단계에서만 풀 관리함

오래간만에 이것저것 공부하다가 adsp 공부자료를 다시 열어볼 일이 생겼다.
문득 블로그에 정리요약본을 1과목 말고는 올리지 않았던 기억이 생각나...
급하게 2과목도 간단하게만 정리해서 공유합니다.

공부 방법이나 문제집 추천 등이 궁금하다면
아래 게시글을 참고해 주세요.
[ADSP] 데이터분석 준전문가 독학 합격 후기! (공부 방법, 교재 추천)

  •  
반응형
반응형

오늘도 돌아온 코테 공부 시간
이번 문제는 "저주의 숫자 3"입니다.

문제 내용

3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다.
정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return 하도록 solution 함수를 완성해 주세요.
3x 마을 사람들의 숫자는 다음과 같습니다.
10진법 3x 마을에서 쓰는 숫자 10진법 3x 마을에서 쓰는 숫자
1 1 6 8
2 2 7 10
3 4 8 11
4 5 9 14
5 7 10 16
제한사항
1 ≤ n ≤ 100

입출력 예
n = 15, result = 25
n = 40, result = 76

작성 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i=1; i<=n; i++){
            answer++;
            // 앞 자리가 3, 13이면 하나씩 패스해서 10개 점프
            // 3의 배수이거나, 끝자리가 3이면 +1해서 패스
            while ((answer/10 == 3) || (answer/10 == 13) || (answer%3 == 0) || (answer%10 == 3)) {
                answer += 1; 
            }
        }
        return answer;
    }
}

맨 처음에 바보 같이 if 문으로만 해결하려고 했는데
생각해 보니 조건에 따라서는 숫자 패스를 많이 해야 하는 경우도 있고 해서
while에서 조건에 해당하는 동안은 계속 넘기는 방식으로 해결을 했다.

하지만 내 방식의 단점은 제약조건 n이 커지면 오류가 난다는 것

다른 분들 풀이를 보니 3의 배수인 경우는 나와 동일하게 %(나머지) 연산자로 작업했다.
하지만 숫자 3이 들어가는 경우는 아래와 같이 문자열로 바꾼 후에 "3"이 있는지 판별하는 방식을 쓰더라.

String.valueOf(answer).contains("3")

오늘도 하나 배웠다...!

(문제 출처 : 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/120871)

반응형
반응형

다시 돌아온 코딩 테스트 타임이다. 진짜 다 까먹어서 기초의 기초의 기초부터 튀기려고 한다.
근데 나 첫 취준 때 코테 보기 싫어서 공기업 커리어 탄건데...
결국 공공도 코테 보는 엔딩^^ 이럴 거면 그냥 사기업 갈까 봐요

각설하고 시작하는 이번 문제는 "분수의 덧셈"입니다.
사실 이것도 n트만에 성공했어요.
그래도 자바가 공통적으로 많이 쓰인대서 자바 하려고 하는데... 낯설다.
나 전에 자바로 어떻게 어플도 만들고 했지? 과거의 나 칭찬해~ 

문제 내용

첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항
0 <numer1, denom1, numer2, denom2 < 1,000

입출력 예
numer1 denom1 numer2 denom2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]

작성 코드 (1차 도전)

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = {0, 0};
        int[] divn = new int[1000]; // 기약분수를 위해, 최대공약수 찾는 용도
        int i = 1; int n = 0;
        
        // 일단 분수 덧셈 먼저 해준다
        answer[0] = numer1*denom2 + numer2*denom1;
        answer[1] = denom1*denom2;
        
        // 덧셈 결과물을 기약분수로 나누기 위해 최대 공약수를 찾는 부분
        for (i=1; i<=answer[0] || i<= answer[1]; i++){
            if ((answer[0]%i==0) && (answer[1]%i==0)){
                divn[n] = i; 
                n++;
            } // 가장 마지막에 들어간 n이 최대 공약수임
              // 근데 생각해보니 배열 안쓰고 그냥 변수 하나로 해도 되잖아?
        }
        
        answer[0] = answer[0]/divn[n-1];
        answer[1] = answer[1]/divn[n-1];
        
        return answer;
    }
}

작성 코드(2차 도전)

class Solution {
    public int[] solution(int numer1, int denom1, int numer2, int denom2) {
        int[] answer = {0, 0};
        int i = 1;
        int divmax = 0; // 최대공약수를 저장할 수 있는 변수로 바꿈
        
        answer[0] = numer1*denom2 + numer2*denom1;
        answer[1] = denom1*denom2;
        
        for (i=1; i<=answer[0] || i<= answer[1]; i++){
            if ((answer[0]%i==0) && (answer[1]%i==0)){
                divmax = i; // 제일 마지막에 저장되는 애가 최대공약수
            } 
        }
        
        answer[0] = answer[0]/divmax;
        answer[1] = answer[1]/divmax;
        
        return answer;
    }
}

사실 뇌가 굳어서 구글의 힌트를 조금 보고 풀긴 했다.
사실 진짜진짜 처음에는 이프엘즈 난무함...ㅋ
어려운 문제도 척척 푸는 그 날까지 노력해보겠어

(문제 출처 : 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/120808)

반응형

+ Recent posts