๐Ÿ”ฌ Explore/ํŒŒ์ด์ฌ์„ ํŒŒ์ด์ฌ๋‹ต๊ฒŒ

[ํŒŒ์ด์ฌ์„ ํŒŒ์ด์ฌ๋‹ต๊ฒŒ] Part 06. Itertools / Collections ๋ชจ๋“ˆ (Programmers)

devCloud 2023. 10. 17. 07:55
728x90

๐Ÿ—’ ๊ฐ•์˜๋…ธํŠธ ๐Ÿ—’

๊ณฑ์ง‘ํ•ฉ (Cartesian product) ๊ตฌํ•˜๊ธฐ

๋ณดํ†ต ๊ณฑ์ง‘ํ•ฉ์„ ๊ตฌํ•  ๋•Œ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ๋‘ iterable์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณฑํ•ด๊ฐ„๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” itertools.product๋ฅผ ์ด์šฉํ•˜๋ฉด, for๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ณฑ์ง‘ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

import itertools

iterable1 ='ABCD'
iterable2 = 'xy'
print(list(itertools.product(iterable1, iterable2)))

โ˜ ๋ฌธ์ œ 1 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ 1์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค๊ธฐ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋ฌธ์ž์—ด์„ ๋‹ด์€ ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ, mylist ๊ฐ€ solution ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. solution ํ•จ์ˆ˜๊ฐ€ mylist๋ฅผ ์ผ์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด ๋ฆฌํ„ดํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด

  • arr์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • arr ์›์†Œ์˜ ๊ธธ์ด๋Š” 5๋ฅผ ๋„˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

 

โ˜‘ Solution

def solution(mylist):
    answer = []
    for i in mylist:
        for j in i:
            answer.append(j)
    return answer

์ด ๋ฐฉ๋ฒ• ๋ง๊ณ ๋„ 2์ฐจ์›์—์„œ 1์ฐจ์›์œผ๋กœ ๋งŒ๋“œ๋ ค๋ฉด 1์ฐจ์› ๋ฆฌ์ŠคํŠธ์— ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค.

 

โœ” Feedback โœ”

๋ณดํ†ต์€ ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด 2์ฐจ์›์„ 1์ฐจ์›์œผ๋กœ ๋งŒ๋“ ๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” for๋ฌธ์„ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์–ด ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

my_list = [[1, 2], [3, 4], [5, 6]]

# ๋ฐฉ๋ฒ• 1 - sum ํ•จ์ˆ˜
answer = sum(my_list, [])

# ๋ฐฉ๋ฒ• 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))

# ๋ฐฉ๋ฒ• 3 - itertools์™€ unpacking
import itertools
list(itertools.chain(*my_list))

# ๋ฐฉ๋ฒ• 4 - list comprehension ์ด์šฉ
[element for array in my_list for element in array]

# ๋ฐฉ๋ฒ• 5 - reduce ํ•จ์ˆ˜ ์ด์šฉ 1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))

# ๋ฐฉ๋ฒ• 6 - reduce ํ•จ์ˆ˜ ์ด์šฉ 2
from functools import reduce
import operator
list(reduce(operator.add, my_list))

์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ๊ฐ ์›์†Œ์˜ ๊ธธ์ด๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

# ๋ฐฉ๋ฒ• 7 - numpy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ flatten ์ด์šฉ
import numpy as np
np.array(my_list).flatten().tolist()

โ˜ ๋ฌธ์ œ 2 ์ˆœ์—ด๊ณผ ์กฐํ•ฉ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์ˆซ์ž๋ฅผ ๋‹ด์€ ์ผ์ฐจ์› ๋ฆฌ์ŠคํŠธ, mylist์— ๋Œ€ํ•ด mylist์˜ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ชจ๋“  ์ˆœ์—ด์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด

  • mylist ์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

โ˜‘ Solution

from itertools import *
def solution(mylist):
    return sorted(list(permutations(mylist, len(mylist))))
  • permutaions : ์ˆœ์—ด์„ ๋งŒ๋“œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ค‘๋ณต์—†์ด ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.
  • combinations : ์กฐํ•ฉ์„ ๋งŒ๋“œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ์ด๋‹ค. ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ค‘๋ณต์—†์ด ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.

์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋Š” ๊ฒƒ์€ AB์™€ BA๋Š” ๋‹ค๋ฅธ ๊ฑฐ๋ผ๊ณ  ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์€ AB์™€ BA๋Š” ๊ฐ™์€ ๊ฑฐ๋ผ๊ณ  ์ทจ๊ธ‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


โ˜ ๋ฌธ์ œ 3 ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ์•ŒํŒŒ๋ฒณ ์ฐพ๊ธฐ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

์ด ๋ฌธ์ œ์—๋Š” ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ๋ฌธ์ž์—ด, mystr์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. mystr์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ์•ŒํŒŒ๋ฒณ๋งŒ์„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด

  • mystr์˜ ์›์†Œ๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • mystr์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

โ˜‘ Solution

from collections import Counter
my_str = list(map(str, input().strip()))
count = Counter(my_str)
max = 0
ans = []
for key, value in count.items():
    if max <= value:
        max = value
        ans.append(key)
print(''.join(sorted(ans)))

์˜ˆ์ œ๋Š” ํ†ต๊ณผํ–ˆ์œผ๋‚˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. Counter์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์™œ์ผ๊นŒ? 

ccddd๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ์ถœ๋ ฅ๊ฐ’์€ d์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ์ฝ”๋“œ๋Š” cd๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

max๊ฐ€ ์ฒ˜์Œ์—” 0์ด์—ˆ์œผ๋‹ˆ c์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ“๊ฐ’์ด ๋˜์–ด์„œ c๋„ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋ฐ˜๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค์‹œ ํ’€์–ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

from collections import Counter
my_str = sorted(list(map(str, input().strip()))) #๋ฌธ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌ
m = max(Counter(my_str).values()) #์ตœ๋Œ“๊ฐ’
for key, value in Counter(my_str).items(): 
    if  m <= value:
        print(key, end = '')
  • Counter.keys() : ํ‚ค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. { 'c' : 2, 'd' : 3 } ์—์„œ c์™€ d๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • Counter.values() : values๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  { 'c' : 2, 'd' : 3 } ์—์„œ 2์™€ 3์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • Counter.items() : key์™€ value ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
728x90