😊 모든 수를 뽑아내므로, 방문한 것을 체크할 필요가 없다. 숫자 1개씩 모두 뽑아내는 코드를 작성하면 된다.
📢 Node.js(JavaScript)로 알고리즘을 풀 때, console.log()가 '시간 초과'에 많은 영향을 준다. 수가 큰 알고리즘 문제를 풀 때는, str 변수를 만들어 모든 결과값을 적절하게 저장해놓고 마지막에 console.log() 단 한 번으로 해결하는 것이 좋다. 아니 그렇게 해야 한다.
for loop을 열고 재귀를 진행해준다. 방문을 했다면 true, output에 해당 값(i+1) push 그리고 그 다음 숫자를 진행하기 위헤 dfs(cnt+1)를 진행해준다. depth의 끝까지 진행하기 위해 마지막 값을 pop()하고 해당 방문은 false로 변경해준다.
3. print() function을 이용해 원하는 값의 길이만큼 값을 구할 때마다 출력해준다.
위와 같은 재귀를 이용해 위 문제를 해결할 수 있다. 조금 세세하게 이해하기 위해서는 debugging 추천한다.
📢 지금까지는 대회를 생각하고 C++를 이용해 알고리즘을 푼 것이 아니기 때문에 시간에 그렇게 신경을 쓰지 않았다. 정확한 로직을 이용해 효율적으로 문제를 해결할 수 있으면 된다고 생각했기 때문이다. 하지만 우연히 console.log() 방법을 바꿔보았더니 시간 단축이 엄청나졌다. 앞으로는 console.log를 최소화 해야겠다. 시간 단축에 엄청난 도움이 된다. 성능을 위해서 사소한 하나까지 신경쓰자.
입력 받은 단어 중 가장 큰 단어 길이(max)와 가장 작은 단어 길이(min)를 뽑아오고, 외부 for loop은 단어의 길이만큼, 내부 for loop은 입력 받은 단어 개수만큼 반복한다. 내부 for loop에서 같은 길이의 단어를 배열에 push하고, 배열 길이가 1보다 크다면 해당 배열을 정렬한 후 최종 배열에 push해준다. 이 방법으로 간단하게 해결했다.
Solution 2)
다른 풀이를 참고하던 중에, 기존에는 몰랐던 localeCompare() built-in function과 Set objet를 발견했다. sort()로 단어의 길이만큼 정렬하고, 같은 길이의 단어가 있다면 localeCompare()를 이용해 정렬이 가능했다. 그렇게 정렬된 배열을 new Set()에 넣어주면 unique한 value를 받아볼 수 있다. 속도도 훨씬 빠르므로 Solution 2를 추천한다.