세번째 알고리즘 스터디!
혼자할 때보다 훨씬 많이 배워가는 중이다. 혼자할 때는 풀고 나면 끝이었는데, 스터디를 함께하면서 부족했던 부분, 내가 생각하지 못했던 부분을 다시 살펴보고 의견을 나눠보면서 더 깊게 배울 수 있었다.
이번에 푼 문제는 타겟넘버, 주차 요금 계산, [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언어에서 벗어나지 못하고 있다고 생각하지만, 요즘은 차츰차츰 메소드를 사용하는 횟수도 늘어나고 뭔가 자바스크립트에 가까워지고 있다고 느껴진다. 좀 더 노력해보자.
무난하게 풀어보았다. 시간복잡도를 고민하기는 했어야해서 시간이 걸리긴 했지만, 큰 문제는 없었다.
요즘 알고리즘 풀면서 가장 많이 신경쓰는 부분이 시간복잡도이다. 뭔가 효휼적으로 코드를 작성하고 싶은 마음에 이중루프문을 가지게 될만한 코드는 최대한 자재하려고 하다보니, 알고리즘을 푸는데 시간도 더 오래 걸리는 것 같기도 하고..? 근데 재밌다..!!
늘 성장해나가는 대킴! 파이팅!