DevYoon
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ ๋ง์ ์ํธ (Python) ๋ณธ๋ฌธ
link ๐ https://school.programmers.co.kr/learn/courses/30/lessons/155652#
๋ฌธ์ ์ค๋ช
๋ ๋ฌธ์์ด s์ skip, ๊ทธ๋ฆฌ๊ณ ์์ฐ์ index๊ฐ ์ฃผ์ด์ง ๋, ๋ค์ ๊ท์น์ ๋ฐ๋ผ ๋ฌธ์์ด์ ๋ง๋ค๋ ค ํฉ๋๋ค. ์ํธ์ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฌธ์์ด s์ ๊ฐ ์ํ๋ฒณ์ index๋งํผ ๋ค์ ์ํ๋ฒณ์ผ๋ก ๋ฐ๊ฟ์ค๋๋ค.
- index๋งํผ์ ๋ค์ ์ํ๋ฒณ์ด z๋ฅผ ๋์ด๊ฐ ๊ฒฝ์ฐ ๋ค์ a๋ก ๋์๊ฐ๋๋ค.
- skip์ ์๋ ์ํ๋ฒณ์ ์ ์ธํ๊ณ ๊ฑด๋๋๋๋ค.
์๋ฅผ ๋ค์ด s = "aukks", skip = "wbqd", index = 5์ผ ๋, a์์ 5๋งํผ ๋ค์ ์๋ ์ํ๋ฒณ์ f์ง๋ง [b, c, d, e, f]์์ 'b'์ 'd'๋ skip์ ํฌํจ๋๋ฏ๋ก ์ธ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ 'b', 'd'๋ฅผ ์ ์ธํ๊ณ 'a'์์ 5๋งํผ ๋ค์ ์๋ ์ํ๋ฒณ์ [c, e, f, g, h] ์์์ ์ํด 'h'๊ฐ ๋ฉ๋๋ค. ๋๋จธ์ง "ukks" ๋ํ ์ ๊ท์น๋๋ก ๋ฐ๊พธ๋ฉด "appy"๊ฐ ๋๋ฉฐ ๊ฒฐ๊ณผ๋ "happy"๊ฐ ๋ฉ๋๋ค.
๋ ๋ฌธ์์ด s์ skip, ๊ทธ๋ฆฌ๊ณ ์์ฐ์ index๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ ๊ท์น๋๋ก s๋ฅผ ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 5 ≤ s์ ๊ธธ์ด ≤ 50
- 1 ≤ skip์ ๊ธธ์ด ≤ 10
- s์ skip์ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- skip์ ํฌํจ๋๋ ์ํ๋ฒณ์ s์ ํฌํจ๋์ง ์์ต๋๋ค.
- 1 ≤ index ≤ 20
def solution(s, skip, index):
answer = ''
# skip ์ฌ๋ถ ๊ธฐ๋ก ๋ฆฌ์คํธ
check = [1] * ((ord('z') - ord('a')) + 1)
last = len(check)
# skip ์ํ๋ฒณ ๊ธฐ๋ก
for skipAlp in skip:
check[ord(skipAlp) - ord('a')] = 0
for alp in s:
idx = 1
# skip์ ์๋ ์ํ๋ฒณ ๊ฑด๋ ๋ด ํ์
passIdx = 0
change = ''
alpOrd = ord(alp) - ord('a')
# index ์ด์ ๊ฑด๋๋ฐ๋ฉด ์ข
๋ฃ
while passIdx < index:
checkOrd = alpOrd + idx
# ํ์ฌ ์์น๊ฐ ๋ฆฌ์คํธ ๋ฒ์ด๋๋ฉด (z๋ฅผ ๋์ด๊ฐ๋ฉด)
if checkOrd >= last:
# ๋ค์ a๋ก ๋ณต๊ท
checkOrd %= last
# ๊ฑด๋ ๋ธ ์ ์์ผ๋ฉด (skip์ ํด๋น ์ํ๋ฒณ ์์ผ๋ฉด)
if check[checkOrd]:
# pass
passIdx += 1
# passํ ํ์๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ผ๋ฉด => answer์ ์ํ๋ฒณ ๋ํ๊ธฐ
if passIdx == index:
change = chr(checkOrd + ord('a'))
# ๋ค์ ์ํ๋ฒณ์ผ๋ก
idx += 1
answer += change
return answer
โ๏ธ s์ ๊ฐ ์ํ๋ฒณ์ index๊ฐ ๋ค์ ์๋ ๊ฒ์ผ๋ก ๊ต์ฒดํด์ค์ผ ํ๋๋ฐ, ๋ง์ฝ ์ค๊ฐ์ skip์ ๋ค์ด ์๋ ์ํ๋ฒณ์ด๋ผ๋ฉด ๊ฑด๋๋ฐ์ด์ผ ํ๋ค. ์ด ์ ์ด ๋ก์ง์ ์ง๋๋ฐ ์กฐ๊ธ ํท๊ฐ๋ ธ๋ค.
โ๏ธ idx๋ skip์ ์ํ๋ฒณ์ด ์๋ ์๋ , ์ผ๋จ ๋ค์ ์นธ์ผ๋ก ๊ฐ๊ธฐ ์ํ ๋ณ์์ด๋ค.
โ๏ธ passIdx๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์, ๋ง์ฝ ์ด ๋ณ์์ ๊ฐ์ด index์ ๊ฐ์์ง๋ค๋ฉด a๋ณด๋ค skip์ด ๋ฐ์๋๋ฉด์ index๊ฐ ๋ค์ ์๋ ์ํ๋ฒณ์ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก answer์ ๋ํด์ค๋ค.
โ๏ธ ์ผ๋ถ ๋ฌธ์ ์์ ์ธ๋ฑ์ค ์๋ฌ๊ฐ ๋ฌ๋๋ฐ, ์์น๊ฐ 'z'๋ฅผ ๋์ด๊ฐ ๊ฒฝ์ฐ ๋ค์ 'a'๋ก ๋ณต๊ทํด์ฃผ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์์๋ค. ์ฒ์์๋ ๋จ์ํ 26(z์ ์๋ฒ)์ ๋นผ์คฌ๋๋ฐ, ๋ช ๋ฐํด๋ฅผ ๋ ์๋ ์๋ค๋ ๊ฑธ ๊ฐ๊ณผํ๋ค! ๊ทธ๋์ 26์ ๋นผ๋ ๊ฒ์ด ์๋๋ผ, 26์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ก์ง์ ์์ ํ๋ค.