DevYoon
[ํ๋ก๊ทธ๋๋จธ์ค] ์๊ถ๋ํ (Python) ๋ณธ๋ฌธ
link ๐ https://school.programmers.co.kr/learn/courses/30/lessons/92342
๐ฌ ๋ผ์ด์ธ์ด ํ์ด์ ์ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ DFS๋ก ๊ตฌํ ํ, ๋ผ์ด์ธ๊ณผ ์ดํผ์น์ ์ ์์ฐจ๋ฅผ ๊ณ์ฐํ๋ค.
๐ฌ ํ๋ค๊ฐ ๋งํ์ ๊ณ ๋ฏผํ๋ค ์นด์นด์ค์ ํด์ค์ ์ฐธ๊ณ ํ๊ณ , ๋ผ์ด์ธ์ด ํ ๊ณผ๋ ์ ์ด๋ณผ ์ ์๋ ํ์ด์ ์ ํ์ (0 ~ ์ดํผ์น๊ฐ ์ ํ์ด +1)๋ก ๋์ด์ผ ์๊ฐ์ด๊ณผ๊ฐ ๋์ง ์๋๋ค๋ ํ๋ค๋ ํ์ ์ป์๋ค.
๐ฌ ์ค๊ฐ์ ๊ณ์ answer์ ๊ฐ์ด 0์ผ๋ก ๊ฐ๋์ฐจ ๋์ค๋ ์ค๋ฅ๊ฐ ์์๋ค...๐ญ ๊ณ์ ๋๋ฒ๊น ํด๋ด๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด์ ๊ตฌ๊ธ๋ง ํด๋ณด์๋๋ฐ list(๋ฐฐ์ด) ์ด ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ์ ๋ถ์ด ์์๋ค. ์ ์ ๋ ๊ฒ ํ๋ฉด ๋๋ ๊ฑฐ์ง,,,ใ ใ
โก ์ด์ ๋ฅผ ์์๋ค! ์๋๋ max_list = lion์ผ๋ก ๋ฃ์๋๋ฐ, lion ๋ฐฐ์ด์ DFS ํจ์์์ ์ถํ [0, 0, 0, 0, ...] ์ผ๋ก ์ด๊ธฐํ ๋๋ค. ๊ทธ๋์ ํน์ ์์ ๋ณต์ฌ ๋ฌธ์ ์ผ๊น ์ถ์ด deepcopy๋ฅผ ์จ์ฃผ์๋๋ฐ, ํด๊ฒฐ๋์๋ค!๐ค
from copy import deepcopy
max_gap = 0
max_list = []
def cal_score(apeach, lion):
global max_gap, max_list
apeach_score = 0
lion_score = 0
for idx in range(11):
if apeach[idx] == 0 and lion[idx] == 0:
continue
if apeach[idx] >= lion[idx]:
apeach_score += 10-idx
elif apeach[idx] < lion[idx]:
lion_score += 10-idx
if lion_score > apeach_score:
gap = lion_score - apeach_score
if gap > max_gap:
max_gap = gap
max_list = deepcopy(lion)
elif gap == max_gap:
for idx in range(10, -1, -1):
if lion[idx] > max_list[idx]:
max_list = deepcopy(lion)
break
elif lion[idx] < max_list[idx]:
break
def DFS(idx, lion, shot, apeach):
if shot == 0:
cal_score(apeach, lion)
return
if idx == 11:
return
a_score = apeach[idx]
for num in range(a_score+2):
if shot >= num:
lion[idx] = num
DFS(idx+1, lion, shot-num, apeach)
lion[idx] = 0
def solution(n, info):
global max_list
temp = [0 for _ in range(11)]
DFS(0, temp, n, info)
if max_list:
return max_list
else:
return [-1]