[Leetcode] 38. Count and Say

Seongjun Lee·2022년 2월 19일
0

[Leetcode] - Problem

목록 보기
38/43
post-thumbnail

Problem

문제 링크

  1. N == 1이면 1이다.
  2. N != 1이면 N-1의 Say값을 받는다.
  3. Say란, 입력으로 주어진 값(숫자)을 앞에서부터 차례대로 읽었을때 연속되는 숫자의 개수를 반납하는 기능이다.
    • ex) 3322251 : 3이 2개, 2가 3개, 5가 1개, 1이 1개 따라서, 23321511을 리턴하면된다.
  4. N의 Say을 구하는 문제

Solution

N == 1인 조건을 이용해서 재귀 함수를 사용해서 문제를 해결한다.
N-1의 값을 재귀함수로 돌려서 가장 깊은 depth에서 N == 1일때 1을 반납하고 N == 2일때부터 Say로직을 구현하고 그 값을 N == 3 depth에 반납한다.

위 방법으로 구하고자하는 N의 Say값을 구한다.

JS Code

/**
 * @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)}`
}
profile
Hi there 👋

0개의 댓글