SEB 섹션2. 6일차 TIL - JS 고차함수 리뷰
오늘은 JS/Node의 비동기 챕터로 넘어갔는데... 비동기 등에 대해서 배우기 전 먼저 고차함수에 대한 리뷰가 진행되었다. 리뷰라고 해봐야 고차함수 관련 문제들이 있고 그걸 푸는 정도??
그래서 사실 거의 오늘 새롭게 배운 내용은 없고 이전 학습한 내용들을 복습하는 수준으로 하루 수업이 진행되었다. 이런 진행으로 인해서 오늘 가장 큰 걱정거리는 블로그 쓸 내용이 없다는 것이다. 이번에 풀어본 문제에서도 새로 학습하게 된 내용 등이 없고 모두 기존에 인지하는 상식선에서 나온 문제들이라 새롭게 추가적으로 알게된 것을 이야기 하기도 어렵다는 생각이 든다.
그렇다고 비동기에 관해서 사전에 어느 정도 알고 있는 내용을 쓰자니 내일 본격적으로 비동기를 시작하는데 굳이? 차피 내일도 비동기에 관해서 써야만 한다.
오늘은 쓸말이 없기 때문에 이전에 진행했던 자료구조 챕터에서 풀었던 코플릿 중 가장 마지막 문제를 주말에 풀었는데 이에 관해서 간단하게 회고를 해보고자 한다. 문제를 푸는데 소요되었던 시간을 어림 잡아서 계산해보면 대략 10시간 정도 쓴 것 같은 느낌이다.
처음 3시간 정도는 문제를 처음보고 입출력 예시에서 확인되는 패턴을 보고서 분석하는 것에 시간을 소비했다. 그리고 패턴이 보이자 그에 맞춰서 코드를 작성하였는데 7시간 정도 코드를 계속 만지작 거렸던 것 같다. 하지만 투자한 시간에 비해서 코드가 그리 엄청 길지는 않다. 공백 모두 합쳐도 100줄이 안 넘어간다.
다만 지속적으로 디버깅을 돌렸는데 디버깅을 돌릴 때마다 예상치 못한 경우의 수가 튀어나와서 농담이 아니라 디버깅만 한 70번 돌린 것 같다.;;; 그렇게 10시간을 투자해서 문제를 풀고나서 레퍼런스 코드를 봤는데 너무 간단해보여서 순간 억울했다. 심지어 코드가 짧아서 더 어이가 없었다.
입출력예시를 거의 이제 외워버린 수준이다.
'12131232'
문제는 위와 같이 1, 2, 3을 바코드처럼 조합하여 문자열 형태로 출력하여야 한다. 출력되는 문자열의 길이는 함수의 인자로 전달받는다. 그렇지만 한가지 어려워지는 부분은 인접한 동일 부분수열이 안된다는 점이다. '1132' '3123123'에서 볼드 처리된 부분과 같이 인접한 부분수열의 내용이 동일하면 안되어서 이러한 기준에 맞춰 바코드를 생성하여야 한다.
부분수열에 대한 검증은 str.slice()메소드를 활용하여, 시작점을 -1로 설정하면서 새로 숫자가 추가될 때마다 반복문 등을 통해 전체 문자열을 검증하는 방식으로 부분수열을 검증했다.
그 다음은 위의 숫자가 산출되는 로직인데 이 문제의 경우는 dfs관련 문제라고 언급되어 있어 처음에 그래프 형태로 위의 경우의 수를 정리해서 진행했다. (여기서부터가 뻘짓의 시작이었는데;;) 각 숫자는 vertex, 그리고 특정 vertex와 edge가 존재하는 vertex들을 문자열에 추가하는 방식으로 진행했다. dfs라는 키워드와 패턴분석이 결합하다보니 이렇게 로직을 짜고 문제를 풀어나갔는데
생각보다 예외사항이 너무 많아서 디버깅하면서 추가한 코드는 많지도 않은데 지웠다 썻다를 반복한 것만 같다. 어쨋든 자력으로 최대한 검색을 하지않고 스스로 사고하면서 문제를 풀어보는 연습을 하고 싶어서 시도해보았고, 문제를 통과했을 때는 상당한 만족감을 느낄 수 있었다. 그리고 레퍼런스를 보고서는 겁나 후회했다.
무언가 쉽게 풀 수 있는 방향이 있는데 초반에 방향을 잘못 잡았었다는 듯한 느낌이다. 앞으론 앵간하면 5시간 넘게 안 풀리면 그냥 레퍼런스를 봐야겠다. 레퍼런스를 보고서 느낀 것은 작은 부분(case)부터 패턴을 분석해보고 코드를 작성할 때도 작은 부분부터 적용하여 문제풀이를 시도해봐야 된다는 것을 깨달았다.