ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค [lv2] ๋ชจ์Œ์‚ฌ์ „ ํŒŒ์ด์ฌ

2021. 10. 7. 00:43ใ†๐Ÿ”ฑ Algorithm

๐Ÿ“Œ  ์ ‘๊ทผ

1. A, E, I, O, U ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋ฉฐ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆœ์—ด(permutation)์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค.

2. ๊ฐ ๋ชจ์Œ์˜ ์กฐํ•ฉ์ด 1๊ฐ€์ง€์ธ ๊ฒฝ์šฐ, 2๊ฐ€์ง€์ธ ๊ฒฝ์šฐ, ... 5๊ฐ€์ง€์ธ ๊ฒฝ์šฐ, ์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์— ๋งž๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

   2 - 1. ์˜ˆ๋ฅผ ๋“ค์–ด ์กฐํ•ฉ์ด 5๊ฐ€์ง€์ธ ๊ฒฝ์šฐ๋Š”, AEIOU ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ (์ค‘๋ณต ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—) AAAAA, EEEEE ... UUUUU ๊ฐ™์€ ๊ฒฝ์šฐ๋„ ์กด์žฌํ•œ๋‹ค.

   2 - 2. ๋•Œ๋ฌธ์— ๋‹จ์ˆœ permutation ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค. 

3. ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค(์†ŒํŒ…).

 

๊ฒฐ๋ก :  ์‚ฌ์‹ค์ƒ, A, E, I, O, U ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ, ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ซ™ ํŽผ์นœ ํ›„ ์†ŒํŒ….

โŒ  permutation ์œผ๋กœ ์ ‘๊ทผํ–ˆ์„ ๋•Œ (์˜ค๋‹ต)

from itertools import product, chain


def solution(word):
    basic = ["A", "E", 'I', "O", "U"]
    word_set = basic[:]

    for i in range(2, 6):
        for j in permutations(basic, i):
            word_set.append(''.join(j))
   
	...

์ด ๊ณผ์ •์—์„œ permutation ๊ณผ product์˜ ์ฐจ์ด๋ฅผ ๋Š๊ผˆ๋‹ค.

permutation ์€ ๊ฐ ์›์†Œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ์กฐํ•ฉํ•˜๋Š” ๋ฐ˜๋ฉด  <=>  product ๋Š” ๊ฐ ์›์†Œ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์กฐํ•ฉํ•œ๋‹ค.

์ฆ‰ product ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ๋ชจ์Œ์„ ์ค‘๋ณตํ•˜์—ฌ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, permutation ์€ ํ•˜๋‚˜์˜ ๋ชจ์Œ์— ๋Œ€ํ•œ ์ค‘๋ณต ์—ฐ์‚ฐ์€ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋•Œ๋ฌธ์— product ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค.

 

 

โœ…   itertools.product() ์‚ฌ์šฉ

from itertools import product, chain


def solution(word):
    basic = ["A", "E", 'I', "O", "U"]
    word_set = basic[:]
    for i in range(2, 6):
        word_set += list(map(list, product(basic, repeat=i)))
    result = sorted(list(map(lambda x: ''.join(x), word_set)))
    
    return result.index(word) + 1

 

+ itertools.chain() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

itertools ์˜ chain() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด iterableํ•œ ๊ฐ์ฒด๋“ค์„ ์ธ์ˆ˜๋กœ ๋ฐ›์•„ ํ•˜๋‚˜์˜ iterator๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

from itertools import product, chain


def solution(word):
    basic = ["A", "E", 'I', "O", "U"]
    word_set = basic[:]
    
    for i in range(2, 6):
        word_set = chain(word_set, list(map(list, product(basic, repeat=i))))
    result = sorted(list(map(lambda x: ''.join(x), word_set)))
    
    return result.index(word) + 1