[TIL] 3일차 - Jacoste 알고리즘

Daehyun·2022년 10월 23일
0

[TIL]

목록 보기
3/6

세번째 알고리즘 스터디!
혼자할 때보다 훨씬 많이 배워가는 중이다. 혼자할 때는 풀고 나면 끝이었는데, 스터디를 함께하면서 부족했던 부분, 내가 생각하지 못했던 부분을 다시 살펴보고 의견을 나눠보면서 더 깊게 배울 수 있었다.

이번에 푼 문제는 타겟넘버, 주차 요금 계산, [3차] 압축 세 문제를 풀었다.
물론 1레벨은 생략!

타겟 넘버

타겟 넘버 문제는 깊이 탐색을 하며 재귀함수를 사용하는 문제였다. 오랜만에 재귀함수를 사용하다 보니 함수가 완성될 때까지 많은 고민을 했다. 두시간 걸려서 만들었는데 만들고 보니 별 거 아니었다. 풀었을 때는 나름 잘 했다고 생각했는데, 스터디를 하다보니 굉장이 복잡한 코드라고 느껴졌다. 공부를 하면서 훨씬 간단하게 만들 수 있음을 알게 되었다. 그래도 만족스러운 코드다! 아무런 참고도 없이 혼자 재귀를 해냈다는데 칭찬!!

function solution(numbers, target) {
    let cnt = 0;
    let sum = 0;

    function rec(arr, goal)
    {
        if (arr.length === 0 && goal === 0)
            return 0;
        else if (arr.length === 0 && goal !== 0)
            return 1;
        rec(arr.slice(0, -1), goal + arr[arr.length - 1]) === 0 ? cnt++ : cnt;
        rec(arr.slice(0, -1), goal - arr[arr.length - 1]) === 0 ? cnt++ : cnt;
        return 1;
    }
    rec(numbers, target);
    return cnt;
}

주차 요금 계산

주차요금. OUT이 없을 때 23:59에 아웃을 추가해주면 다양한 경우의 수를 생각하지 않고 해결할 수 있는 문제였다. 왜... 난 생각해내지 못했던 걸까??? 여전히 나는 C언어에서 벗어나지 못하고 있다고 생각하지만, 요즘은 차츰차츰 메소드를 사용하는 횟수도 늘어나고 뭔가 자바스크립트에 가까워지고 있다고 느껴진다. 좀 더 노력해보자.

압축

무난하게 풀어보았다. 시간복잡도를 고민하기는 했어야해서 시간이 걸리긴 했지만, 큰 문제는 없었다.

마무리

요즘 알고리즘 풀면서 가장 많이 신경쓰는 부분이 시간복잡도이다. 뭔가 효휼적으로 코드를 작성하고 싶은 마음에 이중루프문을 가지게 될만한 코드는 최대한 자재하려고 하다보니, 알고리즘을 푸는데 시간도 더 오래 걸리는 것 같기도 하고..? 근데 재밌다..!!

1개의 댓글

comment-user-thumbnail
2022년 10월 27일

늘 성장해나가는 대킴! 파이팅!

답글 달기