๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2021 KAKAO BLIND RECRUITMENT '๋ฉ”๋‰ด ๋ฆฌ๋‰ด์–ผ' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 2. 27.
728x90
๋ฐ˜์‘ํ˜•
 

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

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

programmers.co.kr

"""
๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์ด ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด orders, "์Šค์นดํ”ผ"๊ฐ€ 
์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฝ”์Šค์š”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด course๊ฐ€ 
๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, "์Šค์นดํ”ผ"๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ์˜ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์„ 
๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.
"""

from itertools import combinations
from collections import Counter

def solution(orders, course):
    _list = []
    for order in orders:
        for c in course:
            _list += list(combinations(sorted(order), c))
            
    _dict = {k: [2] for k in course}
    for k, v in Counter([''.join(v) for v in _list]).items():
        if _dict[len(k)][0] == v:
            _dict[len(k)].append(k)
        elif _dict[len(k)][0] < v:
            _dict[len(k)] = [v, k]
    
    answer = []
    for v in _dict.values():
        answer += v[1:]
    return sorted(answer)

"""
์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ–ˆ๋‹ค. course๊ฐ€ [2,3,4]์ผ๋•Œ 2๊ฐ€์ง€ ์ฝ”์Šค์š”๋ฆฌ๋ฅผ ์ „๋ถ€ ์ ๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ
๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ 2๊ฐ€์ง€ ์ฝ”์Šค์š”๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์„ ํƒ๋ฐ›์€ ๋ฉ”๋‰ด๋“ค์ด์—ˆ๋‹ค.
'ABC', 'AB', 'AC', 'AB' ์˜ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ๋žŒ๋“ค์ด ์ฃผ๋ฌธํ–ˆ๋‹ค๋ฉด
'AB'์˜ ๋ฉ”๋‰ด๊ฐ€ 3๋ฒˆ, 'AC'์˜ ๋ฉ”๋‰ด๊ฐ€ 2๋ฒˆ ์ฃผ๋ฌธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐ€์ง€ ๋ฉ”๋‰ด์˜ ์ฝ”์Šค์š”๋ฆฌ๋กœ๋Š”
'AB'๊ฐ€ ์„ ํƒ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ๋ฌธํ•œ ์‚ฌ๋žŒ์ด ๊ฐ™๋‹ค๋ฉด ์ค‘๋ณต์œผ๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค.
'AB','AC'๊ฐ€ 3๋ฒˆ์”ฉ ์ฃผ๋ฌธ๋˜์—ˆ์œผ๋ฉด ๋‘๊ฐ€์ง€ ์ฝ”์Šค์š”๋ฆฌ๊ฐ€ ๋‘˜๋‹ค ์˜ฌ๋ผ๊ฐ„๋‹ค.

๊ทธ๋ž˜์„œ ํ’€๋ ค๊ณ  ํ•œ ๋ฐฉ์‹์€ combinations ์œผ๋กœ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Counter๋กœ ๋งŒ๋“  ์กฐํ•ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“ ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ์ฃผ๋ฌธํ•œ ๋ฉ”๋‰ด๋ฅผ answer์— ๋”ํ•œ๋‹ค.

- 13~15 line
์ฃผ๋ฌธํ•œ ๋ฉ”๋‰ด๋ฅผ ์†ŒํŠธํ•˜์—ฌ ์กฐํ•ฉ์„ ๋งŒ๋“ ๋‹ค. ์ด๋•Œ ์ฃผ์ธ์ด ์›ํ•œ ๋ฉ”๋‰ด๊ฐ€์ง€์ˆ˜๋กœ ๋งŒ๋“ค์–ด์•ผํ•ด์„œ
์ด์ค‘for๋ฌธ์œผ๋กœ combinations(sorted(order), c)์œผ๋กœ c๊ฐ€์ง€์˜ ์กฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.
์ด๋•Œ ์†ŒํŠธ๋ฅผ ํ•œ ์ด์œ ๋Š” ABC, BCA๊ฐ€ ๊ฐ™์€ ๋ฉ”๋‰ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

- 17 line
๋”•์…”๋„ˆ๋ฆฌ๋ฅผ course์˜ ๋ฉ”๋‰ด๊ฐœ์ˆ˜๋ฅผ key๊ฐ’์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.
์—ฌ๊ธฐ์— 2๊ฐ€์ง€์˜ ๋ฉ”๋‰ด๋“ค์„ ๋‹ด๊ณ , 3๊ฐ€์ง€์˜ ๋ฉ”๋‰ด๋“ค์„ ๋‹ด๊ณ , ... ์œผ๋กœ ๋‹ด๋Š”๋‹ค.
_dict = {k: [2] for k in course} ์—์„œ [2]๋กœ ํ•œ ์ด์œ ๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์ฃผ๋ฌธ๋˜์–ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.
์ตœ์†Œ 2๋ฒˆ์ด์ƒ ์ฃผ๋ฌธ๋˜์–ด์•ผ ํ•˜๊ณ , 3๋ฒˆ์ด์ƒ ์ฃผ๋ฌธํ•œ 2๊ฐ€์ง€๋ฉ”๋‰ด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

- 18 line
for k, v in Counter([''.join(v) for v in _list]).items(): 
์€ ๋งŒ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ [key: ๊ฐœ์ˆ˜]์˜ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์„œ key, value์Œ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

- 19~22 line
if _dict[len(k)][0] == v:
๋Š” k์˜ ๊ธธ์ด๊ฐ€ ๋ฉ”๋‰ด์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— _dict[๋ฉ”๋‰ด๊ฐœ์ˆ˜][0] == v:๋ผ๊ณ  ํ•ด์„๋˜๊ณ ,
_dict[๋ฉ”๋‰ด๊ฐœ์ˆ˜][0] ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด [2] ์ด๋‹ค. 
์ด๊ฑด ๋งŒ์•ฝ ๊ฐ™์€ ์ฃผ๋ฌธํšŸ์ˆ˜๋ผ๋ฉด ์ •๋‹ต์— ๋”ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ฃผ๋ฌธํšŸ์ˆ˜๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
'AB','AB','AC','AC','AD','AD','AD' ๋ผ๊ณ  ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด
Counter([''.join(v) for v in _list])๋Š” {'AB':2, 'AC':2, 'AD':3}์ด ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ฒซ if๋ฌธ์—์„œ _dict = { 2:[2,'AB']}์ด ๋œ๋‹ค.
๋‹ค์Œ for๋ฌธ์—์„  _dict = { 2: [2,'AB','AC'] }๊ฐ€ ๋œ๋‹ค. (๊ฐ™์€ ์ฃผ๋ฌธํšŸ์ˆ˜์ด๊ธฐ๋•Œ๋ฌธ์—)
๋‹ค์Œ for๋ฌธ์—์„œ _dict = { 2: [3, 'AD'] } ๋กœ ๋ฐ”๋€๋‹ค. (์ฃผ๋ฌธํšŸ์ˆ˜๊ฐ€ ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—)

- 24~ line
์ด์ œ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋˜ 2 or 3 .. ๋“ฑ์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋นผ๊ณ  answer์— ๋„ฃ์–ด์ค€๋‹ค.
๊ทธ๋‹ค์Œ sortํ•˜์—ฌ ๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€