[๋ฌธ์ ๋งํฌ] (https://programmers.co.kr/learn/courses/30/lessons/72411)
1. ๋ฌธ์ ์ค๋ช
- ์ ๋ ฅ orders : ๊ฐ ์๋๋ค์ด ์ฃผ๋ฌธํ ๋จํ๋ฉ๋ด๋ค์ด ๋ฌธ์์ด ํ์์ผ๋ก ๋ด๊ธด ๋ฐฐ์ด course : "์ค์นดํผ"๊ฐ ์ถ๊ฐํ๊ณ ์ถ์ดํ๋ ์ฝ์ค์๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋จํ๋ฉ๋ด๋ค์ ๊ฐฏ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด
- ์ถ๋ ฅ "์ค์นดํผ"๊ฐ ์๋ก ์ถ๊ฐํ๊ฒ ๋ ์ฝ์ค์๋ฆฌ์ ๋ฉ๋ด ๊ตฌ์ฑ์ ๋ฌธ์์ด ํํ๋ก ๋ฐฐ์ด์ ๋ด์ return ์ฌ์ ์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- ๊ท์น (1) ๊ฐ์ฅ ๋ง์ด ์ฃผ๋ฌธํ ๋จํ ๋ฉ๋ด๋ค์ ์ฝ์ค์๋ฆฌ ๋ฉ๋ด๋ก ๊ตฌ์ฑ ex1 ) AC๊ฐ ๋ค๋ฒ, CD๋ ์ธ๋ฒ ์ผ ๋ → AC๋ฅผ ๋๊ฐ๊น์ง ์๋ฆฌ2๊ฐ์ฝ์ค๋ก ์ฑํ ex2) BCFG๊ฐ ๋๋ฒ, ACDE๊ฐ ๋ ๋ฒ ์ฃผ๋ฌธ๋จ → ๋ ๋ค ์๋ฆฌ4๊ฐ์ฝ์ค๋ก ์ฑํ
(2) ์ฝ์ค์๋ฆฌ๋ ์ต์ 2๊ฐ์ง ์ด์์ ๋จํ ๋ฉ๋ด๋ก ๊ตฌ์ฑ (3) ์ต์ ๋ ๋ช ์ด์์ ์๋์ด ์ฃผ๋ฌธํ ๋จํ์๋ฆฌ๋ง ์ฝ์ค์๋ฆฌ์ ํ๋ณด๊ฐ ๋จ
2. ์ ์ถ๋ ฅ ์์
orders | course | result |
["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"] |
3. ์ฝ๋
from itertools import combinations
def solution(orders, course):
answer = []
foodMap = [{} for _ in range(11)] #๋ฉ๋ด ๊ฐ์์ ๋ฐ๋ผ ๋์
๋๋ฆฌ๋ฅผ ์ฌ์ฉ(2~10๊น์ง 11๊ฐ์ฌ์ฉ)
maxCnt = [0 for _ in range(11)] #๋ฉ๋ด ๊ฐ์๋ณ ์ต๋๋ฑ์ฅํ์ ์ ์ฅ
for str in orders:
#์ฝ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉ๋ด์ ๊ฐฏ์๋ ๋๊ฐ ์ด์, ๋ฌธ์์ด ๊ธธ์ด๋งํผ ๋ฉ๋ด๊ฐ์๋ฅผ ์งํ AC๋ฉด ๋๊ฐ, CDE๋ฉด ๋๊ฐํน์์ธ๊ฐ
for num in range(2,len(str)+1):
#input์ผ๋ก ์ฃผ์ด์ง๋ ๋ฌธ์์ด์ sortํด์ ์ ๋ฌ, ์ ๋ ฌ๋ ์ํ๋ก ๊ฐ์(num)๋งํผ ์กฐํฉ์ ๋ง๋ค์ด์ ํํํํ๋ก ๋ฆฌ์คํธ๋ก ๋ฐํ
for i in combinations(sorted(str),num):
key = ''.join(i) #string์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉ
if key in foodMap[num]: #๋ฉ๋ด๊ตฌ์ฑ์ด ์ด๋ฏธ์์ผ๋ฉด
foodMap[num][key] +=1
maxCnt[num] = max(maxCnt[num],foodMap[num][key])
else:
foodMap[num][key] = 1
for num in course:
for key, value in foodMap[num].items():
if value >=2 and value == maxCnt[num]: #๋๊ฐ ์ด์์ธ๊ฒ, ์ต๋๊ฐ๊ณผ ๊ฐ์ ๋ชจ๋ ๊ฒ
answer.append(key)
return sorted(answer)
์ธ ๋ฒ์งธ ์ ์ถ๋ ฅ ์์ ๊ธฐ์ค ๋ณ์ ์ค๋ช
- foodMap : ๋๊ฐ์กฐํฉ์ฝ์ค์๋ฆฌ, ์ธ๊ฐ์กฐํฉ์ฝ์ค์๋ฆฌ ๋ฑ๋ฑ ๊ฐ ๋ฉ๋ด๊ฐฏ์๋ณ ํ๋ณด๋ค์ ๋ด๊ณ ๊ทธ ํ๋ณด๋ค์ orders์์์ ๋ฑ์ฅํ์๋ฅผ count
- [{}, {}, {'XY': 2, 'XZ': 1, 'YZ': 1, 'WX': 2, 'WY': 1, 'AW': 1, 'AX': 1}, {'XYZ': 1, 'WXY': 1, 'AWX': 1}, {}, {}, {}, {}, {}, {}, {}]
- maxCnt : ๋ฉ๋ด๊ฐฏ์๋ณ ์ต๋ ๋ฑ์ฅํ์๋ฅผ count
- [0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0]
- answer
- ['XY', 'WX']
4. ์ด๋ ต๊ฑฐ๋ ํท๊ฐ๋ ธ๋ ์
- ๋ฌธ์ ์ดํดํ๊ธฐ
๊ฐ์ฅ ๋ง์ด ์ฃผ๋ฌธํ ๋จํ ๋ฉ๋ด๋ค์ ์ฝ์ค์๋ฆฌ ๋ฉ๋ด๋ก ๊ตฌ์ฑ
์๋ฅผ ๋ค์ด, AC๊ฐ ๋ค๋ฒ, CD๋ ์ธ๋ฒ ์ผ ๋, AC๋ฅผ ๋๊ฐ๊น์ง ์ฝ์ค์๋ฆฌ๋ก ์ฑํํด์ผ ํ๋ค.
๊ธ์ ์ฝ๋ค๊ฐ ๋๋ ์ฆ์ด์์ ์ด ๋ถ๋ถ์ ์บ์นํ์ง ๋ชปํ๋ค..
- ์กฐํฉ์ ์ด๋ป๊ฒ ์กฐ์ฌํ ์ง
from itertools import combinations ์ ์ฌ์ฉ
์กฐํฉ์ ์ ํํ๊ณ ์ ํ์ํ๊ณ ๋ก ์ด๋ฃจ์ด์ง๋ค.
5. ์ฐธ๊ณ ์๋ฃ
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ด ๋๋ง์๊ธฐ - Python (0) | 2021.05.18 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฒด์ก๋ณต - Python (0) | 2021.05.18 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํฌ์ผ๋ชฌ - Python (0) | 2021.05.18 |
[ํ๋ก๊ทธ๋๋จธ์ค] 2016 - Python (0) | 2019.08.13 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ธ์์ ๊น์๋ฐฉ ์ฐพ๊ธฐ - Python (0) | 2019.08.07 |