https://leetcode.com/problems/count-and-say/
Count and Say - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
๐ Problem
count-and-say sequence๋ ์ฌ๊ท์ ์ผ๋ก ์ ์๋ ์ซ์ ๋ฌธ์์ด๋ก,
- countAndSay(1) = '1' ๋ก ์์ํด์,
- countAndSay(n) ์ countAndSay(n-1) ๋ฅผ ์ฝ์ ๋ฌธ์์ด์ ์ซ์๋ก ํํํ๋ค.
์๋ฅผ ๋ค์ด
Input n=2 ์ธ ๊ฒฝ์ฐ,
countAndSay(2) ๋ countAndSay(1)์ ๊ฒฐ๊ณผ๊ฐ '1' ์ ์ซ์๋ค์ countํด ๋ฌธ์ฅ์ผ๋ก ๋ง๋ ๊ฒฐ๊ณผ๊ฐ์ด๋ค.
-> '1๊ฐ์ 1' ๋ง ์์ผ๋ฏ๋ก countAndSay(2) = '11' ์ด ๋๋ค.
n=3์ธ ๊ฒฝ์ฐ,
countAndSay(2) = '11' ๋ฅผ '2๊ฐ์ 1' ๋ก ์ฝ์ด ๊ฒฐ๊ณผ๊ฐ '21' ์ด ๋๋ค.
* ์ฃผ์ํ ์ ์ ์ซ์ count๋ ๊ฐ์ ์ซ์๊ฐ ์ฐ์์ ์ผ๋ก ์ด์ด์ง ๋๊น์ง๋ง ์ ํจํ๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก countAndSay(n-1) = '111221' ์ธ ๊ฒฝ์ฐ,
countAndSay(n)์ '3๊ฐ์ 1, 2๊ฐ์ 2, 1๊ฐ์ 1' ๋ก, '312211' ๊ฐ ๋๋ค.
๐ก Solution
n๋ฒ์งธ countAndSay ๊ฐ์ ๊ตฌํ๋ ค๋ฉด n-1์ countAndSay ๊ฐ์ด ํ์ํ๋ค.
์ซ์ ๋ฌธ์์ด์ countํ๊ณ ์ฝ๋ ํจ์ (readString())๋ฅผ ๊ตฌํํ๊ณ , ์ด๋ฅผ n-1 ๋ฒ ๋ฐ๋ณตํ๋ ํ์์ผ๋ก ๊ตฌํํ์๋ค.
readString() ํจ์์ ๊ฒฝ์ฐ ์์ ๋ฌธ์(prev)์ ํ์ฌ ๋ฌธ์๋ฅผ ๋น๊ตํ์ฌ ๋์ผํ ๊ฒฝ์ฐ ๊ฐฏ์(cnt)๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ,
๋ค๋ฅธ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ string (res)์ ์ง๊ธ๊น์ง countํ ๋ฌธ์์ ๊ฐฏ์๋ฅผ ์ ์ฅํ๋ค.
class Solution(object):
def countAndSay(self, n: int) -> str:
say = '1' # n: 1 -> say: '1'
# ์ด์ say๊ฐ์ ์ฝ์ด n๋ฒ์งธ say๊ฐ์ ๊ตฌํ๋ค.
# (์ด๋ฏธ 1์ ๋ํ say ๊ฐ์ ๊ตฌํด์ง ์ํ์ด๋ฏ๋ก n-1๋ฒ ๋ฐ๋ณต)
for i in range(1, n):
say = self.readString(say)
return say
def readString(self, seq: str) -> str:
res = ''
prev = ''
cnt = 0
for i in range(len(seq) + 1):
# ์ฒซ ๋ฌธ์์ ๊ฒฝ์ฐ prev ๋ฌธ์๋ฅผ ์ฒซ ๋ฌธ์๋ก ์ ์ฅํ๊ณ ๋์ด๊ฐ๋ค.
if i == 0:
prev = seq[i]
cnt += 1
# string์ด ๋๋๋ฉด ํ์ฌ prev ๋ฌธ์์ cnt๋ฅผ ๊ฒฐ๊ณผ์ ์
๋ฐ์ดํธํ๊ณ ๋๋ธ๋ค.
elif i == len(seq):
res += (str(cnt) + prev)
# ๋ฌธ์๊ฐ ์ด์ ๋ฌธ์์ ๊ฐ์ ๊ฒฝ์ฐ, cnt๋ฅผ ์ถ๊ฐํ๊ณ
# ๋ค๋ฅผ ๊ฒฝ์ฐ res๋ฅผ ์
๋ฐ์ดํธ ํ๊ณ prev์ cnt๋ฅผ ์ด๊ธฐํํ๋ค.
else:
if prev == seq[i]:
cnt += 1
else:
res += (str(cnt) + prev)
prev = seq[i]
cnt = 1
return res
'PROGRAMMING > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์นด๋ ์ง ๋ง์ถ๊ธฐ (python) (0) | 2022.07.17 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ธ๋ก ์ด๋ํ๊ธฐ (python) (0) | 2022.07.10 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (python) (0) | 2022.07.03 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋จ์ด ๋ณํ (python) (0) | 2022.07.02 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ๊ฒ์ (python) (0) | 2022.06.14 |