숫자 N이 입력되었을 때
규칙에 맞게 수를 세어 결과값을 반환하는 프로그램을 짜시오.
문제 풀이
예시를 보고 이해하면 크게 어려운 문제는 아니다. 앞의 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(1, len(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
s = Solution()
print(s.countAndSay(3))
print(s.countAndSay(4))
print(s.countAndSay(5))
print(s.countAndSay(30))
|
cs |
'온라인 코딩 테스트 문제 풀이 > LeetCode 문제 풀이' 카테고리의 다른 글
Python으로 푸는 LeetCode 62. Unique Paths (Medium) (0) | 2019.04.08 |
---|---|
Python으로 푸는 LeetCode 66. Plus One (Easy) (0) | 2019.04.07 |
Python으로 푸는 LeetCode 27. Remove Element (Easy) (0) | 2019.04.04 |
Python으로 푸는 LeetCode 26. Remove Duplicates from Sorted Array (Easy) (0) | 2019.04.03 |