- Today
- Total
작심삼일
[LeetCode] 38 | Count and Say | Python 본문
문제 링크: https://leetcode.com/problems/count-and-say/
문제
The count-and-say sequence is a sequence of digit strings defined by the recursive formula:
- countAndSay(1) = "1"
- countAndSay(n) is the way you would "say" the digit string from countAndSay(n-1), which is then converted into a different digit string.
To determine how you "say" a digit string, split it into the minimal number of substrings such that each substring contains exactly one unique digit. Then for each substring, say the number of digits, then say the digit. Finally, concatenate every said digit.
For example, the saying and conversion for digit string "3322251":
Given a positive integer n, return the nth term of the count-and-say sequence.
조건
- 1 <= n <= 30
내 풀이
문제에서 주어진 대로 행동하도록 코드를 짜면 된다.
현재 string을 앞에서부터 읽으며 같은 숫자가 연속된다면 그 숫자와 반복된 횟수를 저장하고, 다른 숫자가 나올 때 이전까지 반복된 횟수와 그 숫자를 새로운 string(new_string)에 저장한다.
현재 string의 모든 숫자에 대해 위와 같은 연산을 끝냈다면, new_string을 string으로 바꾼 뒤 이를 n-1번 반복한다.
n-1번 반복하는 이유는, 문제에서 주어진 예시를 참고해보면 n=1일 때는 그대로 리턴하기 때문에 맨 처음 한번을 빼야하기 때문이다.
코드
class Solution:
def countAndSay(self, n: int) -> str:
string = '1'
for i in range(n-1):
past = string[0]
count = 1
new_string = ''
for digit in string[1:]:
if digit == past:
count += 1
else:
new_string += str(count) + str(past)
past = digit
count = 1
new_string += str(count) + str(past)
string = new_string
return string
'스터디 > 코테' 카테고리의 다른 글
[LeetCode] 12 | Integer to Roman | Python (0) | 2022.10.20 |
---|---|
[LeetCOde] 692 | Top K Frequent Words | Python (0) | 2022.10.19 |
[2095] Delete the Middle Node of a Linked List | Python (0) | 2022.10.14 |
[LeetCode] 237 | Delete Node in a Linked List | Python (0) | 2022.10.13 |
[LeetCode] 976 | Largest Perimeter Triangle | Python (0) | 2022.10.12 |