[Programmers/ level2] ๋ชจ์Œ์‚ฌ์ „๐Ÿ™„

2 ๋ถ„ ์†Œ์š”


๐Ÿ‘ฉ๋ฌธ์ œ

์‚ฌ์ „์— ์•ŒํŒŒ๋ฒณ ๋ชจ์Œ โ€˜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


์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด์„œ ์ƒˆ๊นŒ๋งฃ๊ฒŒ ์žŠ๊ณ  ์žˆ์—ˆ๋˜ ๋“ฑ๋น„์ˆ˜์—ด์„ ๋‹ค์‹œ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ›„์— ๋‚ด๊ฐ€ ์ง์ ‘ ๋ฌธ์ œ ์† ์ ์šฉ๋˜๋Š” ๋“ฑ๋น„์ˆ˜์—ด์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ..๐Ÿ˜Œ

๐Ÿ™‡โ€โ™€๏ธํ’€์ด์— ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!


๐Ÿ“ƒ ์ฐธ๊ณ 

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ