2022 KAKAO BLIND RECRUITEMENT
Lv2. ์๊ถ๋ํ
https://programmers.co.kr/learn/courses/30/lessons/92342
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ธ ๋ด๊ฐ ์๊ฐํ ์ ๊ทผ ๋ฐฉ๋ฒ
๊ฐ๋ฅํ ์ ์์ ๊ฒฝ์ฐ์ ์๊ฐ 11๊ฐ์ง(0~10์ )
ํ์ด์ ์๋ ๊ฒฝ์ฐ → n๊ฐ (1≤n≤10)
11๊ฐ์ค์ n๊ฐ๋ฅผ ์ค๋ณตํด์ ๊ณ ๋ฅด๋ฉด ๋จ → ์์ ํ์ ๋ฌธ์
์์ ํ์ ์ค์ n์ ๊ฐ์ง์๊ฐ ์ ์ผ๋ฏ๋ก ์์ด/์กฐํฉ ์ฌ์ฉ.
(๊ฐ์ง์๊ฐ ๋ง์ผ๋ฉด ๊ทธ๋ฆฌ๋/๋ฐฑํธ๋ํน/bfs ์ฌ์ฉ)
from itertools import *
# a๊ฐ b๋ณด๋ค ๋ ์ข์ ๋ฐฐ์น์ผ ๊ฒฝ์ฐ true
def cmp(a, b):
return a[::-1] > b[::-1]
def solution(n, info):
# ๋ผ์ด์ธ์ด ๊ฐ์ฅ ํฐ ์ ์ ์ฐจ์ด๋ก ์ฐ์นํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ
# ret[0..10] : 10-i์ ์์ ๋ผ์ด์ธ์ด ๋งํ ํ์ด์ ์, ret[11] : ์ ์ ์ฐจ์ด
ret = [-1] * 12
for comb in combinations_with_replacement(range(11), n):
arrow = [0] * 12
score = 0
for x in comb: arrow[x] += 1
for i in range(11):
if arrow[i] > info[i]:
score += (10 - i)
elif info[i] != 0:
score -= (10 - i)
if score <= 0: continue
arrow[11] = score
if cmp(arrow, ret):
ret = arrow[:] # deepcopy๋ฅผ ํด์ผ ํจ์ ์ฃผ์
if ret[0] == -1: return [-1]
return ret[:-1]
๐ Key Point
๐ธ deepcopy๋ฅผ ์ํํ ํ์! ⇒ ๋ฆฌ์คํธ ๋์ ํ ๋ a[:] ์ด๋ ๊ฒ ์จ์ค์ผ ๋์ค์ a๊ฐ์ ๋ฐ๊ฟ๋ ๋์ ํ ๋ฆฌ์คํธ๋ ์๋ฐ๋! a์ ๊ฐ๋ง ๊ฐ์ ธ์ค๋ ๊ฒ. ๋ญ๊ฐ ๋น๊ต๋์ ๊ฐ์ ๊ฑฐ ๊ณ ์ ์์ผ๋ฌ์ผํ ๋ ์ฌ์ฉํ๋ ๊ฑฐ ์์ง ์๊ธฐ!
๐ธ continue๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ ๋ค์ ๊ณผ์ ์ ์๋ตํ๊ณ ๋ฐ๋ก ๋๊ณ ์๋ ๋ฐ๋ณต๋ฌธ์ ๋ค์ ์ฐจ๋ก ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ.
๐ธ a[::-1] ⇒ ์ญ์ ๋น๊ต
๐ธ from itertools import * ⇒ ์์ด ์กฐํฉ ์ธ ์ ์์