๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋งค๋‰ด ๋ฆฌ๋‰ด์–ผ (level2, python)

๊ฐœ๋ฐœ์ž HOON 2022. 10. 10. 22:00

๐Ÿ ๋ฌธ์ œ ์„ค๋ช…

 

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๋˜ ์Šค์นดํ”ผ๋Š” ์ฝ”๋กœ๋‚˜19๋กœ ์ธํ•œ ๋ถˆ๊ฒฝ๊ธฐ๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋ฉ”๋‰ด๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” ๋‹จํ’ˆ์œผ๋กœ๋งŒ ์ œ๊ณตํ•˜๋˜ ๋ฉ”๋‰ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ํ˜•ํƒœ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋‰ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ์ข‹์„ ์ง€ ๊ณ ๋ฏผํ•˜๋˜ "์Šค์นดํ”ผ"๋Š” ์ด์ „์— ๊ฐ ์†๋‹˜๋“ค์ด ์ฃผ๋ฌธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์„ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.


๋‹จ, ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด๋Š” ์ตœ์†Œ 2๊ฐ€์ง€ ์ด์ƒ์˜ ๋‹จํ’ˆ๋ฉ”๋‰ด๋กœ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ํ›„๋ณด์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์†๋‹˜ 6๋ช…์ด ์ฃผ๋ฌธํ•œ ๋‹จํ’ˆ๋ฉ”๋‰ด๋“ค์˜ ์กฐํ•ฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด,
(๊ฐ ์†๋‹˜์€ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 2๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•ด์•ผ ํ•˜๋ฉฐ, ๊ฐ ๋‹จํ’ˆ๋ฉ”๋‰ด๋Š” A ~ Z์˜ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.)

 


๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋‹จํ’ˆ๋ฉ”๋‰ด ์กฐํ•ฉ์— ๋”ฐ๋ผ "์Šค์นดํ”ผ"๊ฐ€ ๋งŒ๋“ค๊ฒŒ ๋  ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด ๊ตฌ์„ฑ ํ›„๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 


[๋ฌธ์ œ]

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


[์ œํ•œ์‚ฌํ•ญ]

  • orders ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 2 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • orders ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” ํฌ๊ธฐ๊ฐ€ 2 ์ด์ƒ 10 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ ๋ฌธ์ž์—ด์—๋Š” ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์ด ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • course ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 1 ์ด์ƒ 10 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • course ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋Š” 2 ์ด์ƒ 10 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • course ๋ฐฐ์—ด์—๋Š” ๊ฐ™์€ ๊ฐ’์ด ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ •๋‹ต์€ ๊ฐ ์ฝ”์Šค์š”๋ฆฌ ๋ฉ”๋‰ด์˜ ๊ตฌ์„ฑ์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ return ํ•ด์ฃผ์„ธ์š”.
    • ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด ๋˜ํ•œ ์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ๊ฐ€์žฅ ๋งŽ์ด ํ•จ๊ป˜ ์ฃผ๋ฌธ๋œ ๋ฉ”๋‰ด ๊ตฌ์„ฑ์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด, ๋ชจ๋‘ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • orders์™€ course ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” return ํ•˜๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ด ๋˜๋„๋ก ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

[์ž…์ถœ๋ ฅ ์˜ˆ]
["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"] [2,3,4] ["AC", "ACDE", "BCFG", "CDE"]
["ABCDE", "AB", "CD", "ADE", "XYZ", "XYZ", "ACD"] [2,3,5] ["ACD", "AD", "ADE", "CD", "XYZ"]
["XYZ", "XWY", "WXA"] [2,3,4] ["WX", "XY"]

์ž…์ถœ๋ ฅ ์˜ˆ์— ๋Œ€ํ•œ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #2
AD๊ฐ€ ์„ธ ๋ฒˆ, CD๊ฐ€ ์„ธ ๋ฒˆ, ACD๊ฐ€ ๋‘ ๋ฒˆ, ADE๊ฐ€ ๋‘ ๋ฒˆ, XYZ ๊ฐ€ ๋‘ ๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
์š”๋ฆฌ 5๊ฐœ๋ฅผ ์ฃผ๋ฌธํ•œ ์†๋‹˜์ด 1๋ช… ์žˆ์ง€๋งŒ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์—๊ฒŒ์„œ ์ฃผ๋ฌธ๋œ ๊ตฌ์„ฑ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ํ›„๋ณด์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, ์š”๋ฆฌ 5๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”์Šค์š”๋ฆฌ๋Š” ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #3
WX๊ฐ€ ๋‘ ๋ฒˆ, XY๊ฐ€ ๋‘ ๋ฒˆ ์ฃผ๋ฌธ๋์Šต๋‹ˆ๋‹ค.
3๋ช…์˜ ์†๋‹˜ ๋ชจ๋‘ ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 3๊ฐœ์”ฉ ์ฃผ๋ฌธํ–ˆ์ง€๋งŒ, ์ตœ์†Œ 2๋ช… ์ด์ƒ์˜ ์†๋‹˜์—๊ฒŒ์„œ ์ฃผ๋ฌธ๋œ ๊ตฌ์„ฑ๋งŒ ์ฝ”์Šค์š”๋ฆฌ ํ›„๋ณด์— ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, ์š”๋ฆฌ 3๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”์Šค์š”๋ฆฌ๋Š” ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋˜, ๋‹จํ’ˆ๋ฉ”๋‰ด๋ฅผ 4๊ฐœ ์ด์ƒ ์ฃผ๋ฌธํ•œ ์†๋‹˜์€ ์—†์œผ๋ฏ€๋กœ, ์š”๋ฆฌ 4๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”์Šค์š”๋ฆฌ ๋˜ํ•œ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


 

๐Ÿ ํ’€์ด ์ฝ”๋“œ

from itertools import combinations
from collections import Counter

def solution(orders, course):
    answer = []
    counter = Counter()
    
    for o in orders:
        max_len = len(o)
        for i in range(2, max_len+1):
            for c in combinations(o, i):
                key = ''.join(sorted(c))
                counter[key] += 1
    
    tuples = counter.most_common()
    for c in course:
        a = [t for t in tuples if len(t[0]) == c]
        if a:
            max_count = a[0][1]
            if max_count > 1:
                for b in a:
                    if b[1] == max_count:
                        answer.append(b[0])
    return sorted(answer)

 

combinations ํˆด์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๊ฐ ์ฃผ๋ฌธ์— ๋Œ€ํ•ด์„œ 2๊ฐœ๋ถ€ํ„ฐ ์ฃผ๋ฌธ ์ „์ฒด ๊ธธ์ด๊นŒ์ง€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ์ฐพ๋Š”๋‹ค.

ํ•ด๋‹น ์กฐํ•ฉ์„ ์ •๋ ฌ์‹œํ‚จ ํ›„, counter์— ์ €์žฅํ•œ๋‹ค.

 

counter์˜ most_common ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜จ ์กฐํ•ฉ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด์˜จ๋‹ค.

most_common์˜ ์ธ์ž๋กœ ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด n๊ฐœ๊ฐ€ ๋ฆฌํ„ด๋˜์ง€๋งŒ, ์ธ์ž๋ฅผ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜จ ์กฐํ•ฉ ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฆฌํ„ด๋œ๋‹ค.

 

๊ทธ ์ค‘ ์ฝ”์Šค์š”๋ฆฌ์˜ ๋ฉ”๋‰ด ๊ฐฏ์ˆ˜์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ์กฐํ•ฉ ์ค‘์—์„œ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์กฐํ•ฉ์„ ๋ชจ๋‘ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๋Š”๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ๋œ๋‹ค.