[Leetcode] 38. Count and Say
Problem
N == 1이면 1이다.N != 1이면 N-1의 Say값을 받는다.Say란, 입력으로 주어진 값(숫자)을 앞에서부터 차례대로 읽었을때 연속되는 숫자의 개수를 반납하는 기능이다.- ex) 3322251 : 3이 2개, 2가 3개, 5가 1개, 1이 1개 따라서, 23321511을 리턴하면된다.
- N의 Say을 구하는 문제
Solution
N == 1인 조건을 이용해서 재귀 함수를 사용해서 문제를 해결한다.
N-1의 값을 재귀함수로 돌려서 가장 깊은 depth에서 N == 1일때 1을 반납하고 N == 2일때부터 Say로직을 구현하고 그 값을 N == 3 depth에 반납한다.
위 방법으로 구하고자하는 N의 Say값을 구한다.
JS Code
javascript
/**
* @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)}`
}