본문으로 바로가기

숫자 N이 입력되었을 때

규칙에 맞게 수를 세어 결과값을 반환하는 프로그램을 짜시오.

LeetCode에서 푼 문제 리스트 보기

LeetCode에서 문제 보기

github에서 코드 보기

문제 풀이

예시를 보고 이해하면 크게 어려운 문제는 아니다.  앞의 N의 수에서 변환한 문자열을 기준으로 다시 계산해야 한다. N이 3일 때, "21"이었으므로 N이 4일 경우에는 "21" 를 count and say 해야한다. 따라서 4일 때는, 하나인 2와 한개인 1이 합쳐져서 "1211"이 된다. N이 만약 30이라면 N이 1일때부터 반복해서 결과물을 계산하고 그 결과물을 다음 계산에서 활용하면 된다. (while문)

파이썬 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Solution:
    def countAndSay(self, n: int-> str:
 
        start_n = 1
        result = '1'
        while start_n < n:
            cur_n = result[0]
            cnt = 1
            new_result = ''
 
            if len(result) == 1:
                start_n += 1
                result = '11'
                continue
 
            for i in range(1len(result)):
 
                if cur_n != result[i]:
                    new_result += str(cnt)
                    new_result += str(cur_n)
 
                    # reset
                    cur_n = result[i]
                    cnt = 1
                else:
                    cnt += 1
 
                # last_idx
                if len(result) -1 == i:
                    new_result += str(cnt)
                    new_result += str(cur_n)
            start_n += 1
            result = new_result
        return result
 
 
= Solution()
print(s.countAndSay(3))
print(s.countAndSay(4))
print(s.countAndSay(5))
print(s.countAndSay(30))
cs