[Programmers/ level2] ๋ชจ์์ฌ์ ๐
๐ฉ๋ฌธ์
์ฌ์ ์ ์ํ๋ฒณ ๋ชจ์ โAโ, โEโ, โIโ, โOโ, โUโ๋ง์ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์๋, ๊ธธ์ด 5 ์ดํ์ ๋ชจ๋ ๋จ์ด๊ฐ ์๋ก๋์ด ์์ต๋๋ค. ์ฌ์ ์์ ์ฒซ ๋ฒ์งธ ๋จ์ด๋ โAโ์ด๊ณ , ๊ทธ๋ค์์ โAAโ์ด๋ฉฐ, ๋ง์ง๋ง ๋จ์ด๋ โUUUUUโ์ ๋๋ค.
๋จ์ด ํ๋ word๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด ๋จ์ด๊ฐ ์ฌ์ ์์ ๋ช ๋ฒ์งธ ๋จ์ด์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ฉ์ ํ์ฌํญ
- word์ ๊ธธ์ด๋ 1 ์ด์ 5 ์ดํ์ ๋๋ค.
- word๋ ์ํ๋ฒณ ๋๋ฌธ์ โAโ, โEโ, โIโ, โOโ, โUโ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๐ฉ์ ์ถ๋ ฅ ์
word | result |
---|---|
โAAAAEโ | 6 |
โAAAEโ | 10 |
โIโ | 1563 |
โEIOโ | 1189 |
์ ์ถ๋ ฅ์ ๋ํ ์ค๋ช ์ ํด๋น ์ฌ์ดํธ๋ฅผ ํ์ธํด์ฃผ์ธ์!
๐โโ๏ธ์ ๊ทผ ๋ฐฉ๋ฒ
โ๏ธ ์์ ํ์
- ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 5์ด๋ฏ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ ์ ์๋ค.
- ๊ตฌํ ๊ฒฝ์ฐ์ ์๋ฅผ sort()๋ฅผ ํตํด ์ ๋ ฌํ ๊ฒฝ์ฐ ์ฌ์ ์์ผ๋ก ์ ๋ ฌ๋๊ธฐ ๋๋ฌธ์ word์ ์ธ๋ฑ์ค๋ง์ ๊ตฌํ๋ฉด ๋๋ค.
from itertools import product
def solution(word):
dic = []
for i in range(1, 6):
dic += list(map("".join, product('AEIOU', repeat = i)))
dic.sort()
return dic.index(word) + 1
๐ ์ฌ๊ธฐ์์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ ์กฐ๊ธ ๋ ์์ธํ ์ดํด๋ณด์!
for i in range(1, 6):
dic += list(map("".join, product('AEIOU', repeat = i)))
- product๋ ๊ณฑ์งํฉ์ ๊ตฌํ๋ ํจ์๋ก repeat ๊ฐ์ ํตํด ์์์ ์ค๋ณต ํ์๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
๐ repeat์ด ๊ฐ๊ฐ 1, 2์ผ ๋์ ๊ฒฐ๊ณผ๊ฐ์ ํ์ธํ๋ฉฐ ํ์คํ ์ดํดํด๋ณด์!
tmp1 = list(map("".join, product('AEIOU', repeat = 1)))
tmp2 = list(map("".join, product('AEIOU', repeat = 2)))
tmp1: [โAโ, โEโ, โIโ, โOโ, โUโ]
tmp2: [โAAโ, โAEโ, โAIโ, โAOโ, โAUโ, โEAโ, โEEโ, โEIโ, โEOโ, โEUโ, โIAโ, โIEโ, โIIโ, โIOโ, โIUโ, โOAโ, โOEโ, โOIโ, โOOโ, โOUโ, โUAโ, โUEโ, โUIโ, โUOโ, โUUโ]
๐ ๋ฐ๋ผ์ "AEIOU"๋ก ์ด๋ฃจ์ด์ง 1-5 ๊ธธ์ด์ ๋ชจ๋ ๋ฌธ์์ด์ ๊ตฌํ๊ธฐ ์ํด์๋ repeat์ ๊ฐ์ 1-5๋ก ๋ฐ๊ฟ๊ฐ๋ฉฐ product ์ฐ์ฐ์ ํตํด ๊ณฑ์งํฉ์ ๊ตฌํด์ผ ํ๋ค.
โ๏ธ ์ฌ์ ์ ๋ฌธ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํ ํ์ด
์์ ๊ฐ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ๊ฒฝ์ฐ ๊ทธ ๋งํผ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
์์ ํ์์ ํ์ฉํ์ง ์๊ณ 1-5๋ฒ์งธ ์๋ฆฌ์ ๋จ์ด๋ค์ด ์ด๋ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐ๋๋ ์ง๋ฅผ ํ์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๐ ๊ฐ๊ฐ์ ์์น์์ ๋จ์ด๋ค์ ๊ฐ๊ฒฉ์ ์ ์ฒด ๋ฌธ์์ด์ ๊ฐ์ / ํน์ ๋ฌธ์์ด ๊ธธ์ด์ ๊ฒฝ์ฐ์ ์
๋ฅผ ํตํด ๊ตฌํ ์ ์๋ค. ๊ทธ ์ด์ ๋ ํด๋น ๊ธธ์ด์ ๋ฌธ์์ด๋ค์ด ์ผ์ ๊ฐ๊ฒฉ ์ผ๋ก ์ ์ฒด ๋ฌธ์์ด ์์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋๋ฅผ ํตํด์ ๊ทธ ๊ณผ์ ์ ์ดํดํด๋ณด์!
def solution(word):
max = 0
for i in range(1, 6): # ์ ์ฒด ๋ฌธ์์ด์ ๊ฐ์ ๊ตฌํ๊ธฐ
max += 5**i
result = 0
for i in range(len(word)): # ๊ฐ ๋ฌธ์์ ์์น๋ง๋ค ๊ฐ๊ฒฉ์ ๊ตฌํด ๋ํด๋๊ฐ๋ ๊ณผ์
if word[i] == "A":
result += 1
elif word[i] == "E":
result += max//(5**(i+1))*1+1
elif word[i] == "I":
result += max//(5**(i+1))*2+1
elif word[i] == "O":
result += max//(5**(i+1))*3+1
else:
result += max//(5**(i+1))*4+1
return result
๐์
๋ ฅ์ด I
์ผ ๋ ์งํ๋๋ ๊ณผ์ ์ ์ดํด๋ณด์!
-
์ ์ฒด ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค. = 3905
- ์ฒซ ๋ฒ์งธ ๋ฌธ์๊ฐ I๊ฐ ๋๋ ๋ฐ์ ๊ฐ๊ฒฉ์ ๊ตฌํ๋ค.
- ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ ๊ฒฝ์ฐ ๊ฐ๊ฒฉ์ ๊ตฌํ๋ค.
- ๋ฌธ์์ด ๊ธธ์ด๊ฐ 1์ธ ๋ฌธ์์ด์ ๊ฐ์๋ โAโ, โEโ, โIโ, โOโ, โUโ๋ก 5๊ฐ์ง ์ด๋ค.
- 3905 / 5 = 781์ด ๊ฐ๊ฒฉ์ ํด๋นํ๋ค.
- โIโ์ ์์๋ฅผ ๊ตฌํ๋ค.
- โAEIOUโ์์ โIโ๋ ๋ ๋ฒ์งธ ์์์ด๋ค.
- ๋ฐ๋ผ์ 781 * 2 = 1562๊ฐ ํด๋น ๋ฌธ์์ด์ด ๋์ฌ ๋๊น์ง์ ์ด ๊ฐ๊ฒฉ์ด๋ค.
- ์ฒซ ๋ฒ์งธ ์๋ฆฌ์ ๊ฒฝ์ฐ ๊ฐ๊ฒฉ์ ๊ตฌํ๋ค.
- ์ฒซ ๋ฌธ์์ด์์ ์์ํด 1562 ํ์ โIโ๊ฐ ๋์ค๋ ๊ฒ์ด๋ฏ๋ก ์ ๋ต์ 1562 + 1 = 1563!
โ๏ธ ๋ฑ๋น์์ด์ ํฉ ๊ณต์ ์ด์ฉ
์ด๋ป๊ฒ ๋ฑ๋น์์ด์ด ์ ์ฉ์ด ๋์ง? E
๊ฐ ๋ช ๋ฒ์งธ์ธ์ง๋ฅผ ์์๋ณด๋ ๋ค์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๊ทธ ์ด์ ๋ฅผ ์ ์ ์์ ๊ฒ์ด๋ค.
- ๋จผ์
A
๋ก ์์ํ๋ ๋ฌธ์์ด์ ๊ฒฝ์ฐ์ ์๋ ๊ทธ๋ฆผ์์์ ๊ฐ์ด ๊ณต๋น๊ฐ 5์ธ ์๋ค์ ํฉ์ ํตํด ๊ตฌํ ์ ์๋ค. - E๋ โAEIOUโ์์ ์ฒซ ๋ฒ์งธ์ด๋ค.
- ๋ง์ง๋ง์ผ๋ก
E
์์ ์ ์์น๊น์ง ๋ํด์ผ ํ๋ฏ๋ก +1์ ํด์ค๋ค.
๐ ๊ทธ๋ ๋ค๋ฉด ์ด๋ฅผ ์ ์ฉํ ํ์ด๋ฅผ ํ์ธํ๋ฉฐ ๊ฒ์๊ธ์ ๋ง๋ฌด๋ฆฌํด๋ณด์!
def solution(word):
answer = 0
for i, a in enumerate(word):
answer += (5**(5-i)-1)/5-1 * "AEIOU".index(a) + 1
return answer
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํตํด์ ์๊น๋งฃ๊ฒ ์๊ณ ์์๋ ๋ฑ๋น์์ด์ ๋ค์ ๋ ์ฌ๋ฆด ์ ์์๋ค. ํ์ ๋ด๊ฐ ์ง์ ๋ฌธ์ ์ ์ ์ฉ๋๋ ๋ฑ๋น์์ด์ ๋ฐ๊ฒฌํ ์ ์๊ธฐ๋ฅผ..๐
๐โโ๏ธํ์ด์ ๋ถ์กฑํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์! ๊ฐ์ฌํฉ๋๋ค!
๋๊ธ๋จ๊ธฐ๊ธฐ