[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)}`
}