๐ข ์๊ถ ๋ํ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
"""
์๊ถ๋ํ
๐ ๋ฌธ์
์นด์นด์ค๋ฐฐ ์๊ถ๋ํ๊ฐ ์ด๋ ธ์ต๋๋ค.
๋ผ์ด์ธ์ ์ ๋ฒ ์นด์นด์ค๋ฐฐ ์๊ถ๋ํ ์ฐ์น์์ด๊ณ ์ด๋ฒ ๋ํ์๋ ๊ฒฐ์น์ ๊น์ง ์ฌ๋ผ์์ต๋๋ค. ๊ฒฐ์น์ ์๋๋ ์ดํผ์น์
๋๋ค.
์นด์นด์ค๋ฐฐ ์๊ถ๋ํ ์ด์์์ํ๋ ํ ์ ์์ ์ฐ์ ์ฐ์น๋ณด๋ค๋ ๋ค์ํ ์ ์๋ค์ด ์๊ถ๋ํ์์ ์ฐ์นํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๋ฐ๋ผ์, ์๊ถ๋ํ ์ด์์์ํ๋ ๊ฒฐ์น์ ๊ท์น์ ์ ๋ํ ์ฐ์น์์ธ ๋ผ์ด์ธ์๊ฒ ๋ถ๋ฆฌํ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ์ ํ์ต๋๋ค.
1. ์ดํผ์น๊ฐ ํ์ด n๋ฐ์ ๋ค ์ ํ์ ๋ผ์ด์ธ์ด ํ์ด n๋ฐ์ ์ฉ๋๋ค.
2. ์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
๊ณผ๋
ํ์ ์๋ ์ฌ์ง์ฒ๋ผ ์๊ฒผ์ผ๋ฉฐ ๊ฐ์ฅ ์์ ์์ ๊ณผ๋
์ ์๋ 10์ ์ด๊ณ ๊ฐ์ฅ ํฐ ์์ ๋ฐ๊นฅ์ชฝ์ ๊ณผ๋
์ ์๊ฐ 0์ ์
๋๋ค.
๋ง์ฝ, k(k๋ 1~10์ฌ์ด์ ์์ฐ์)์ ์ ์ดํผ์น๊ฐ a๋ฐ์ ๋งํ๊ณ ๋ผ์ด์ธ์ด b๋ฐ์ ๋งํ์ ๊ฒฝ์ฐ ๋ ๋ง์ ํ์ด์ k์ ์ ๋งํ ์ ์๊ฐ k ์ ์ ๊ฐ์ ธ๊ฐ๋๋ค.
๋จ, a = b์ผ ๊ฒฝ์ฐ๋ ์ดํผ์น๊ฐ k์ ์ ๊ฐ์ ธ๊ฐ๋๋ค.
k์ ์ ์ฌ๋ฌ ๋ฐ ๋งํ๋ k์ ๋ณด๋ค ๋ง์ ์ ์๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒ ์๋๊ณ k์ ๋ง ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ ์ ์ํ์ธ์.
๋ํ a = b = 0 ์ธ ๊ฒฝ์ฐ, ์ฆ, ๋ผ์ด์ธ๊ณผ ์ดํผ์น ๋ชจ๋ k์ ์ ๋จ ํ๋์ ํ์ด๋ ๋งํ์ง ๋ชปํ ๊ฒฝ์ฐ๋ ์ด๋ ๋๊ตฌ๋ k์ ์ ๊ฐ์ ธ๊ฐ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ดํผ์น๊ฐ 10์ ์ 2๋ฐ ๋งํ๊ณ ๋ผ์ด์ธ๋ 10์ ์ 2๋ฐ ๋งํ์ ๊ฒฝ์ฐ ์ดํผ์น๊ฐ 10์ ์ ๊ฐ์ ธ๊ฐ๋๋ค.
๋ค๋ฅธ ์๋ก, ์ดํผ์น๊ฐ 10์ ์ 0๋ฐ ๋งํ๊ณ ๋ผ์ด์ธ์ด 10์ ์ 2๋ฐ ๋งํ์ ๊ฒฝ์ฐ ๋ผ์ด์ธ์ด 10์ ์ ๊ฐ์ ธ๊ฐ๋๋ค.
3. ๋ชจ๋ ๊ณผ๋
์ ์์ ๋ํ์ฌ ๊ฐ ์ ์์ ์ต์ข
์ ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ต์ข
์ ์๊ฐ ๋ ๋์ ์ ์๋ฅผ ์ฐ์น์๋ก ๊ฒฐ์ ํฉ๋๋ค. ๋จ, ์ต์ข
์ ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ์ดํผ์น๋ฅผ ์ฐ์น์๋ก ๊ฒฐ์ ํฉ๋๋ค.
ํ์ฌ ์ํฉ์ ์ดํผ์น๊ฐ ํ์ด n๋ฐ์ ๋ค ์ ํ์ด๊ณ ๋ผ์ด์ธ์ด ํ์ด์ ์ ์ฐจ๋ก์
๋๋ค.
๋ผ์ด์ธ์ ์ดํผ์น๋ฅผ ๊ฐ์ฅ ํฐ ์ ์ ์ฐจ์ด๋ก ์ด๊ธฐ๊ธฐ ์ํด์ n๋ฐ์ ํ์ด์ ์ด๋ค ๊ณผ๋
์ ์์ ๋งํ์ผ ํ๋์ง๋ฅผ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค.
ํ์ด์ ๊ฐ์๋ฅผ ๋ด์ ์์ฐ์ n, ์ดํผ์น๊ฐ ๋งํ ๊ณผ๋
์ ์์ ๊ฐ์๋ฅผ 10์ ๋ถํฐ 0์ ๊น์ง ์์๋๋ก ๋ด์ ์ ์ ๋ฐฐ์ด info๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค.
์ด๋, ๋ผ์ด์ธ์ด ๊ฐ์ฅ ํฐ ์ ์ ์ฐจ์ด๋ก ์ฐ์นํ๊ธฐ ์ํด n๋ฐ์ ํ์ด์ ์ด๋ค ๊ณผ๋
์ ์์ ๋งํ์ผ ํ๋์ง๋ฅผ
10์ ๋ถํฐ 0์ ๊น์ง ์์๋๋ก ์ ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๋ง์ฝ, ๋ผ์ด์ธ์ด ์ฐ์นํ ์ ์๋ ๊ฒฝ์ฐ(๋ฌด์กฐ๊ฑด ์ง๊ฑฐ๋ ๋น๊ธฐ๋ ๊ฒฝ์ฐ)๋ [-1]์ return ํด์ฃผ์ธ์.
๐งก ์ ํ ์ฌํญ
1 โค n โค 10
info์ ๊ธธ์ด = 11
0 โค info์ ์์ โค n
info์ ์์ ์ดํฉ = n
info์ i๋ฒ์งธ ์์๋ ๊ณผ๋
์ 10 - i ์ ์ ๋งํ ํ์ด ๊ฐ์์
๋๋ค. ( i๋ 0~10 ์ฌ์ด์ ์ ์์
๋๋ค.)
๋ผ์ด์ธ์ด ์ฐ์นํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ, return ํ ์ ์ ๋ฐฐ์ด์ ๊ธธ์ด๋ 11์
๋๋ค.
0 โค returnํ ์ ์ ๋ฐฐ์ด์ ์์ โค n
returnํ ์ ์ ๋ฐฐ์ด์ ์์ ์ดํฉ = n (๊ผญ n๋ฐ์ ๋ค ์ด์ผ ํฉ๋๋ค.)
returnํ ์ ์ ๋ฐฐ์ด์ i๋ฒ์งธ ์์๋ ๊ณผ๋
์ 10 - i ์ ์ ๋งํ ํ์ด ๊ฐ์์
๋๋ค. ( i๋ 0~10 ์ฌ์ด์ ์ ์์
๋๋ค.)
๋ผ์ด์ธ์ด ๊ฐ์ฅ ํฐ ์ ์ ์ฐจ์ด๋ก ์ฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง ์ผ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ๋ฅผ return ํด์ฃผ์ธ์.
๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋งํ ๊ฐ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ๊ณ์ํด์ ๊ทธ๋ค์์ผ๋ก ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ๋ฅผ return ํด์ฃผ์ธ์.
์๋ฅผ ๋ค์ด, [2,3,1,0,0,0,0,1,3,0,0]๊ณผ [2,1,0,2,0,0,0,2,3,0,0]๋ฅผ ๋น๊ตํ๋ฉด [2,1,0,2,0,0,0,2,3,0,0]๋ฅผ return ํด์ผ ํฉ๋๋ค.
๋ค๋ฅธ ์๋ก, [0,0,2,3,4,1,0,0,0,0,0]๊ณผ [9,0,0,0,0,0,0,0,1,0,0]๋ฅผ ๋น๊ตํ๋ฉด[9,0,0,0,0,0,0,0,1,0,0]๋ฅผ return ํด์ผ ํฉ๋๋ค.
๋ผ์ด์ธ์ด ์ฐ์นํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ, return ํ ์ ์ ๋ฐฐ์ด์ ๊ธธ์ด๋ 1์
๋๋ค.
๋ผ์ด์ธ์ด ์ด๋ป๊ฒ ํ์ด์ ์๋ ๋ผ์ด์ธ์ ์ ์๊ฐ ์ดํผ์น์ ์ ์๋ณด๋ค ๋ฎ๊ฑฐ๋ ๊ฐ์ผ๋ฉด [-1]์ return ํด์ผ ํฉ๋๋ค.
๐ ์
์ถ๋ ฅ
n info result
5 [2,1,1,1,0,0,0,0,0,0,0] [0,2,2,0,1,0,0,0,0,0,0]
1 [1,0,0,0,0,0,0,0,0,0,0] [-1]
9 [0,0,1,2,0,1,1,1,1,1,1] [1,1,2,0,1,2,2,0,0,0,0]
10 [0,0,0,0,0,0,0,0,3,4,3] [1,1,1,1,1,1,1,1,0,0,2]
"""
import copy
min_temp = -1e9
answers = []
# ๋ผ์ด์ธ๊ณผ ์ดํผ์น์ ์ ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๋ ํจ์
def CalScore(info, ryanShot):
apeach, ryan = 0, 0
for i in range(11):
if (info[i], ryanShot[i]) == (0, 0):
continue
if info[i] >= ryanShot[i]:
apeach += 10 - i
else:
ryan += 10 - i
return ryan - apeach
def dfs(info, ryanShot, n, i):
global min_temp, answers
if i == 11:
if n != 0:
ryanShot[10] = n
scoreDiff = CalScore(info, ryanShot)
if scoreDiff <= 0:
return
result = copy.deepcopy(ryanShot)
# ํ์ฌ ๊ตฌํ ์ต๋ ์ ์์ฐจ๋ฅผ ๋ผ ์ ์๋ ํ์ด ๊ฒฐ๊ณผ ๊ฒฝ์ฐ์ ์
if scoreDiff > min_temp:
# ์ต๋์ ์์ฐจ ๊ฐฑ์
min_temp = scoreDiff
# ์ด์ ๊ฒฐ๊ณผ๋ค๋ก ๋ง๋ค์ด์ง ์ต๋ ์ ์์ฐจ์ ๊ฐ์ ์ ์์ฐจ๊ฐ ๋๋ ๋ผ์ด์ธ์ ํ์ด ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด answers ๋ฐฐ์ด์ ์ถ๊ฐ
answers = [result]
return
if scoreDiff == min_temp:
answers.append(result)
return
# ์ ์ ๋จน๋ ๊ฒฝ์ฐ
if info[i] < n:
ryanShot.append(info[i] + 1)
dfs(info, ryanShot, n - info[i] - 1, i + 1)
ryanShot.pop()
# ์ ์ ์๋จน๋ ๊ฒฝ์ฐ
ryanShot.append(0)
dfs(info, ryanShot, n, i + 1)
ryanShot.pop()
# ํ์ด์ ๊ฐ์๋ฅผ ๋ด์ ์์ฐ์ n, ์ดํผ์น๊ฐ ๋งํ ๊ณผ๋
์ ์์ ๊ฐ์๋ฅผ 10์ ๋ถํฐ 0์ ๊น์ง ์์๋๋ก ๋ด์ ์ ์ ๋ฐฐ์ด info
def solution(n, info):
global min_temp, answers
dfs(info, [], n, 0)
# ๋ผ์ด์ธ์ด ์ฐ์นํ ์ ์๋ ๊ฒฝ์ฐ(๋ฌด์กฐ๊ฑด ์ง๊ฑฐ๋ ๋น๊ธฐ๋ ๊ฒฝ์ฐ)๋ [-1]์ return
if answers == []:
return [-1]
# ๊ฐ์ฅ ํฐ ์ ์ ์ฐจ์ด๋ก ์ฐ์นํ๊ธฐ ์ํด n๋ฐ์ ํ์ด์ ์ด๋ค ๊ณผ๋
์ ์์ ๋งํ์ผ ํ๋์ง๋ฅผ 10์ ๋ถํฐ 0์ ๊น์ง ์์๋๋ก ์ ์ ๋ฐฐ์ด
answers.sort(key=lambda x: x[::-1], reverse=True)
return answers[0]
์ ํ์ฑ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
ํ ์คํธ 1 ใ ํต๊ณผ (0.15ms, 10.3MB) ํ ์คํธ 2 ใ ํต๊ณผ (6.83ms, 10.4MB) ํ ์คํธ 3 ใ ํต๊ณผ (5.62ms, 10.3MB) ํ ์คํธ 4 ใ ํต๊ณผ (2.86ms, 10.2MB) ํ ์คํธ 5 ใ ํต๊ณผ (4.52ms, 10.2MB) ํ ์คํธ 6 ใ ํต๊ณผ (4.95ms, 10.3MB) ํ ์คํธ 7 ใ ํต๊ณผ (1.12ms, 10.3MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.78ms, 10.3MB) ํ ์คํธ 9 ใ ํต๊ณผ (2.24ms, 10.2MB) ํ ์คํธ 10 ใ ํต๊ณผ (0.44ms, 10.3MB) ํ ์คํธ 11 ใ ํต๊ณผ (0.99ms, 10.3MB) ํ ์คํธ 12 ใ ํต๊ณผ (0.68ms, 10.4MB) ํ ์คํธ 13 ใ ํต๊ณผ (3.36ms, 10.2MB) ํ ์คํธ 14 ใ ํต๊ณผ (4.22ms, 10.2MB) ํ ์คํธ 15 ใ ํต๊ณผ (4.35ms, 10.2MB) ํ ์คํธ 16 ใ ํต๊ณผ (2.87ms, 10.5MB) ํ ์คํธ 17 ใ ํต๊ณผ (1.68ms, 10.2MB) ํ ์คํธ 18 ใ ํต๊ณผ (0.16ms, 10.2MB) ํ ์คํธ 19 ใ ํต๊ณผ (0.04ms, 10.2MB) ํ ์คํธ 20 ใ ํต๊ณผ (5.44ms, 10.4MB) ํ ์คํธ 21 ใ ํต๊ณผ (5.10ms, 10.3MB) ํ ์คํธ 22 ใ ํต๊ณผ (10.18ms, 10.2MB) ํ ์คํธ 23 ใ ํต๊ณผ (0.63ms, 10.4MB) ํ ์คํธ 24 ใ ํต๊ณผ (8.67ms, 10.4MB) ํ ์คํธ 25 ใ ํต๊ณผ (9.51ms, 10.4MB)
3. ํด์ค
This post is licensed under CC BY 4.0 by the author.