프로그래머스 > 코딩테스트 > 타겟 넘버

hyeonyohwan·2021년 4월 21일
0

대학교에서 자료구조 수업을 들은 적이 있으나 알고리즘 수업은 들은 적이 없어서 매우매우 감도 안 온 문제... (공부를 소홀히 했던 탓에 자료구조도 성적 안 좋았음)

하도 유명한 알고리즘이라서 개념 정도는 알고 있지만 구현하는 방법에 대해서는 전혀 몰랐다.
이번에 알고리즘 책을 구매를 하였는데 이번 기회에 여러 유용한 알고리즘을 빠삭하게 익혀야겠다.

아무튼 코드는 어디서인지 구했는지 링크가 사라졌지만 다른 분의 코드를 100% 참고하여 풀어보았다. (머릿 속으로 열심히 그림을 그려봄, 너무 어렵... ㅠㅠ)

function solution(numbers, target) {
    let answer = 0;
    getAnswer(0,0);
    function getAnswer(x,value){
        if(x<numbers.length){
            getAnswer(x+1, value+numbers[x]);
            getAnswer(x+1, value-numbers[x]);
        }else{
            if(value === target){
                answer++;
            }

        }
    }
    return answer;
}

만약 [1,1,1,1,1]의 입력값을 기준으로 생각한다면 1+1+1+1+1 까지 내려간 뒤에, 스택 프레임에서 getAnswer(x+1, value+numbers[x])의 마지막 실행이 제거되고 getAnswer(x+1, value-numbers[x])가 실행되어 모든 아래에서부터 차츰 1단계씩 올라가며 경우의 수를 모두 검색하여 돌아가는 것으로 알고 있다.
(혹시 제가 이해한 내용이 틀렸을 경우 지적 너무너무 환영합니다^^)

React와 알고리즘 둘다 초보라서 면접 공부에 코딩테스트 공부에 시간이 너무 없는 것 같다. 그래도 오늘 처음으로 진득하게 리액트 상태관련 에러를 스스로 해결해서 기분이 좋았다. (오늘의 TMI 끝~!!) 열공해야쥥

profile
웹 프론트엔드 개발자입니다.

0개의 댓글