N == 1
이면 1이다.N != 1
이면 N-1의 Say값을 받는다.Say
란, 입력으로 주어진 값(숫자)을 앞에서부터 차례대로 읽었을때 연속되는 숫자의 개수를 반납하는 기능이다.N == 1
인 조건을 이용해서 재귀 함수를 사용해서 문제를 해결한다.
N-1의 값을 재귀함수로 돌려서 가장 깊은 depth에서 N == 1일때 1을 반납하고 N == 2일때부터 Say로직을 구현하고 그 값을 N == 3 depth에 반납한다.
위 방법으로 구하고자하는 N의 Say값을 구한다.
/**
* @param {number} n
* @return {string}
*/
var countAndSay = function (n) {
function dfs(n) {
if (n === 1) return 1
return say(dfs(n - 1))
}
function say(num) {
return Array.from(`${num}`)
.reduce((acc, cur) => {
if (acc.length === 0) {
acc.push(1, cur)
} else {
if (cur === acc[acc.length - 1]) acc[acc.length - 2]++
else acc.push(1, cur)
}
return acc
}, [])
.join('')
}
return `${dfs(n)}`
}