Tags
- stack
- greedy
- Dynamic Programming
- ๊ต์ฌ
- dfs
- ๋ฐฑํธ๋ํน
- ์๋ฎฌ๋ ์ด์
- CodingTest
- ๊ตฌํ
- Java
- ์ํ
- Python
- BFS
- DP
- ์๋ฃ๊ตฌ์กฐ
- Brute Force Algorithm
- ๊ทธ๋ํ ์ด๋ก
- sort
- BOJ
- ์ ๋ ฌ
- PGM
- LV2
- SpringBoot
- ๋ฌธ์์ด
- ๊น์ด ์ฐ์ ํ์
- queue
- Study
- ๊ทธ๋ํ ํ์
- ์ ์๋ก
- ๋๋น ์ฐ์ ํ์
Archives
๊ธฐ๋ก๋ฐฉ
Lv.2 : ๋ฉ๋ด ๋ฆฌ๋ด์ผ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์ ๋ ฅ๋ ์ฃผ๋ฌธ ๋ง๋ค ์ฝ์ค ๊ธธ์ด๋ก ๋ง๋ค ์ ์๋ ์กฐํฉ์ ์ฐพ๋๋ค.
- ์กฐํฉ์ ๋์ ๋๋ฆฌ์ ์ ์ฅํ๋ฉฐ ๊ฐ์๋ฅผ ์นด์ดํธํ๋ค.
- ์ ์ฅ๋ ์กฐํฉ์์ ๊ธธ์ด๋ณ ์ต๋๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐํํ๋ค.
- ์ต๋๊ฐ์ด ์ค๋ณต์ด๋ฉด ๋ชจ๋ ์ ํํ๋ค.
๐ธ ์ฝ๋ ๐ธ
def solution(orders, course):
dic = {}
def find_str(s, pick, d, j): # ์ฌ๊ท๋ก ๋ฌธ์ ์กฐํฉ
if len(pick) >= d: # ์ฐพ๋ ๊ธธ์ด(d)์ ๋ฌธ์๊ฐ ์์ฑ๋๋ฉด
pick = ''.join(sorted(list(pick))) # ๋ฌธ์์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
if pick in dic: # ๋์
๋๋ฆฌ์ ์ ์ฅ
dic[pick] += 1
else:
dic[pick] = 0
return
for i in range(j,len(s)): # ๋ฌธ์ ์กฐํฉ์ ์ํด ์ฌ๊ท
find_str(s, pick+s[i], d, i+1)
for c in course: # ๋ฌธ์์ด ๊ธธ์ด
for i in orders: # ๋ถํด ํ ๋ฌธ์์ด
find_str(i, "", c, 0)
temp = []
for c in course: # ๋ฌธ์์ด ๊ธธ์ด๋ณ๋ก ๋์
๋๋ฆฌ๋ฅผ ๋ถํด
temp.append({k:v for k, v in dic.items() if len(k) == c})
answer = []
for d in temp:
for k, v in d.items(): # ๊ธธ์ด๋ณ ๋์
๋๋ฆฌ์์ value ์ต๋๊ฐ์ key๋ฅผ ์ ์ฅ
if max(d.values()) == v and max(d.values()) != 0:
answer.append(k)
return sorted(answer) # ์ค๋ฆ์ฐจ์ ๋ฐํ
๐ธ ์ฝ๋ ํด์ ๐ธ
- ์ฌ๊ท ํ์์ผ๋ก ๋ฌธ์ ์กฐํฉ์ ๋ง๋ค์ด๊ฐ๋ฉฐ ๋์
๋๋ฆฌ์ ์นด์ดํธํ๋ค.
- ์ด๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์ธ๋ฑ์ฑํ๋ค.
- ๋ฌธ์์ด ๊ธธ์ด๋ณ๋ก ๋์ ๋๋ฆฌ๋ฅผ ๋๋ ์ temp ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
- ๋์ ๋๋ฆฌ์ ๋ณ value ์ต๋๊ฐ์ key๋ฅผ answer ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
- answer๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ฉฐ ๋ฐํํ๋ค.
๐ธ ์ฝ๋ ํด์ ๐ธ
from collections import defaultdict, Counter
from itertools import combinations
def solution(orders, course):
cntr = defaultdict(Counter) # {2:{'AB': 3, 'CD': 1, ...}, ...}
for order in orders: # 1 : ๊ฐ order์ ๋ํด combinations๋ก ๊ฐ๋ฅํ ์กฐํฉ ๋ฝ์์ Counter์ ์ ์ฅ
for n in course:
if n <= len(order):
cntr[n].update(combinations(sorted(order), n))
answer = []
for n in cntr:
max_cnt = max(cntr[n].values()) # 2 : order ์์ ๋ํด ์ต๋ ๋น๋์ ๊ตฌํ๊ธฐ
if max_cnt > 1:
# 3 : 2์์ ์ป์ ๋น๋์๋ ๊ฐ์ ์ฝค๋ณด์ธํธ ๊ตฌํ๊ธฐ
answer += [''.join(k) for k, v in cntr[n].items() if v == max_cnt]
return sorted(answer) # 4 : ์ ๋ ฌํด์ ๋ฐํ
- ๋์
๋๋ฆฌ๋ฅผ Counter ํ์์ผ๋ก ์ ์ธํด ์ฌ์ฉํ๋ค.
- combinations๋ก ๊ฐ๋ฅํ ์กฐํฉ์ ๋ฝ์๋ธ๋ค.
- ๋์ ๋๋ฆฌ์ ์ฃผ๋ฌธ ๊ธธ์ด๋ณ๋ก ์กฐํฉ์ ์นด์ดํธํด ์ ์ฅํ๋ค.
- ๋์
๋๋ฆฌ์์ value ์ต๋๊ฐ์ key๋ฅผ ๋ฝ์๋ธ๋ค.
- ์ต๋๊ฐ์ ์๊ธฐ์์ ์ ์ธ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ธฐ ์ํด 1๋ณด๋ค ์ปค์ผํ๋ค.
- combinations์์ ํํ ํ์์ผ๋ก ์ชผ๊ฐ์ ธ ๋์๊ธฐ ๋๋ฌธ์ join์ ์ฌ์ฉํด ๋ฌธ์์ด๋ก ํฉ์น๋ค.
- ์ ๋ ฌํด ๋ฐํํ๋ค.
๐ธ end ๐ธ
- ์ข ๊ผฌ์ธ ๋ถ๋ถ์ด ๋ง์ ํธ๋๋ฐ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ ธ๋ค.
- ๊ทธ๋๋ ์ ํ์๋ค๊ณ ์๊ฐํ๋๋ฐ ๋ค๋ฅธ ํ์ด๋ฅผ ๋ณด๋ ํํ๊ฐ ์กฐ๊ธ ์๋ค...
- ์กฐํฉ ์ฐพ๊ธฐ๋ฅผ ์ฌ๊ท๋ก ๊ตฌํํ๋๋ฐ combinations() ํจ์๋ก ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์๋ค.
- defalutdict()๋ก ํน์ ํ ํ์(์ฌ๊ธฐ์๋ Counter)์ ์ง์ ํด์ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค ์ ์์๋ค.
- ๋ ๋ค๋ฅธ ํ์ด๋ฅผ ๋ณด๋ Counter์ most_common() ์ ์ฌ์ฉํ๋ฉด ์ต๋๊ฐ ์ฐพ๊ธฐ๋ฅผ ๋ ์ค์ผ ์ ์๋ค.
- ์ง์ ๊ตฌํํ๋ฉฐ ๋์ ๋๋ฆฌ ๋ถํด, ๋ฌธ์์ด ์กฐํฉ์ ์๊ฐํด ๋ณผ ์ ์์๋ ๋ฌธ์ ์๋ค.
- ์ฌ๊ท๋ฅผ ์ฌ์ฉํด์ ๊ทธ๋ฐ์ง ๋ด ์ฝ๋์ combinations() ์ฌ์ฉ ์ฝ๋์ ์๊ฐ์ฐจ์ด๊ฐ ์ปธ๋ค.
728x90
'CodingTest > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_18238 : ZOAC 2 (0) | 2022.10.19 |
---|---|
BOJ_1789 : ์๋ค์ ํฉ (0) | 2022.10.13 |
Lv.2 : ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2022.09.19 |
Lv.1 : ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ (0) | 2022.09.19 |
Lv.2 : ์คํฌํธ๋ฆฌ (0) | 2022.09.18 |