๐ข ์ฝ๋ฉ ํ ์คํธ ๊ณต๋ถ
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
"""
์ฝ๋ฉ ํ
์คํธ ๊ณต๋ถ
๐ ๋ฌธ์
๋น์ ์ ์ฝ๋ฉ ํ
์คํธ๋ฅผ ์ค๋นํ๊ธฐ ์ํด ๊ณต๋ถํ๋ ค๊ณ ํฉ๋๋ค.
์ฝ๋ฉ ํ
์คํธ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ง์๊ณผ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฅ๋ ฅ์ด ํ์ํฉ๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ง์์ ์๊ณ ๋ ฅ, ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฅ๋ ฅ์ ์ฝ๋ฉ๋ ฅ์ด๋ผ๊ณ ํํํฉ๋๋ค.
์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ 0 ์ด์์ ์ ์๋ก ํํ๋ฉ๋๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ฌธ์ ๊ฐ ์๊ตฌํ๋ ์ผ์ ์ด์์ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ด ํ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋น์ ์ ํ์ฌ ์๊ณ ๋ ฅ์ด 15, ์ฝ๋ฉ๋ ฅ์ด 10์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
A๋ผ๋ ๋ฌธ์ ๊ฐ ์๊ณ ๋ ฅ 10, ์ฝ๋ฉ๋ ฅ 10์ ์๊ตฌํ๋ค๋ฉด A ๋ฌธ์ ๋ฅผ ํ ์ ์์ต๋๋ค.
B๋ผ๋ ๋ฌธ์ ๊ฐ ์๊ณ ๋ ฅ 10, ์ฝ๋ฉ๋ ฅ 20์ ์๊ตฌํ๋ค๋ฉด ์ฝ๋ฉ๋ ฅ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ B ๋ฌธ์ ๋ฅผ ํ ์ ์์ต๋๋ค.
ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ๋์ฌ์ผ ํฉ๋๋ค.
์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ๋์ด๊ธฐ ์ํ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ๋ค์ด ์์ต๋๋ค.
์๊ณ ๋ ฅ์ ๋์ด๊ธฐ ์ํด ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํฉ๋๋ค. ์๊ณ ๋ ฅ 1์ ๋์ด๊ธฐ ์ํด์ 1์ ์๊ฐ์ด ํ์ํฉ๋๋ค.
์ฝ๋ฉ๋ ฅ์ ๋์ด๊ธฐ ์ํด ์ฝ๋ฉ ๊ณต๋ถ๋ฅผ ํฉ๋๋ค. ์ฝ๋ฉ๋ ฅ 1์ ๋์ด๊ธฐ ์ํด์ 1์ ์๊ฐ์ด ํ์ํฉ๋๋ค.
ํ์ฌ ํ ์ ์๋ ๋ฌธ์ ์ค ํ๋๋ฅผ ํ์ด ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ๋์
๋๋ค.
๊ฐ ๋ฌธ์ ๋ง๋ค ๋ฌธ์ ๋ฅผ ํ๋ฉด ์ฌ๋ผ๊ฐ๋ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ด ์ ํด์ ธ ์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํ๋ ํธ๋ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๊ตฌํ๋ ์๊ฐ์ด ํ์ํ๋ฉฐ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋น์ ์ ์ฃผ์ด์ง ๋ชจ๋ ๋ฌธ์ ๋ค์ ํ ์ ์๋ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ์ป๋ ์ต๋จ์๊ฐ์ ๊ตฌํ๋ ค ํฉ๋๋ค.
์ด๊ธฐ์ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ๋ด์ ์ ์ alp์ cop, ๋ฌธ์ ์ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด problems๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ก์ ๋,
๋ชจ๋ ๋ฌธ์ ๋ค์ ํ ์ ์๋ ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ์ป๋ ์ต๋จ์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋ชจ๋ ๋ฌธ์ ๋ค์ 1๋ฒ ์ด์์ฉ ํ ํ์๋ ์์ต๋๋ค. ์
์ถ๋ ฅ ์ ์ค๋ช
์ ์ฐธ๊ณ ํด์ฃผ์ธ์
๐งก ์ ํ ์ฌํญ
์ด๊ธฐ์ ์๊ณ ๋ ฅ์ ๋ํ๋ด๋ alp์ ์ด๊ธฐ์ ์ฝ๋ฉ๋ ฅ์ ๋ํ๋ด๋ cop๊ฐ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋๋ค.
0 โค alp,cop โค 150
1 โค problems์ ๊ธธ์ด โค 100
problems์ ์์๋ [alp_req, cop_req, alp_rwd, cop_rwd, cost]์ ํํ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
alp_req๋ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ํ์ํ ์๊ณ ๋ ฅ์
๋๋ค.
0 โค alp_req โค 150
cop_req๋ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ํ์ํ ์ฝ๋ฉ๋ ฅ์
๋๋ค.
0 โค cop_req โค 150
alp_rwd๋ ๋ฌธ์ ๋ฅผ ํ์์ ๋ ์ฆ๊ฐํ๋ ์๊ณ ๋ ฅ์
๋๋ค.
0 โค alp_rwd โค 30
cop_rwd๋ ๋ฌธ์ ๋ฅผ ํ์์ ๋ ์ฆ๊ฐํ๋ ์ฝ๋ฉ๋ ฅ์
๋๋ค.
0 โค cop_rwd โค 30
cost๋ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ๋๋ ์๊ฐ์
๋๋ค.
1 โค cost โค 100
์ ํ์ฑ ํ
์คํธ ์ผ์ด์ค ์ ํ์ฌํญ
0 โค alp,cop โค 20
1 โค problems์ ๊ธธ์ด โค 6
0 โค alp_req,cop_req โค 20
0 โค alp_rwd,cop_rwd โค 5
1 โค cost โค 10
ํจ์จ์ฑ ํ
์คํธ ์ผ์ด์ค ์ ํ์ฌํญ
์ฃผ์ด์ง ์กฐ๊ฑด ์ธ ์ถ๊ฐ ์ ํ์ฌํญ ์์ต๋๋ค.
๐ ์
์ถ๋ ฅ
alp cop problems result
10 10 [[10,15,2,1,2],[20,20,3,3,4]] 15
0 0 [[0,0,2,1,2],[4,5,3,1,2],[4,11,4,0,2],[10,4,0,4,2]] 13
# ์ฐธ๊ณ : https://tech.kakao.com/2022/07/13/2022-coding-test-summer-internship/
"""
# ์๊ณ ๋ ฅ๊ณผ ์ฝ๋ฉ๋ ฅ์ ๋ด์ ์ ์ alp์ cop, ๋ฌธ์ ์ ์ ๋ณด๋ฅผ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด problems
def solution(alp, cop, problems):
# problems (ํ์ํ ์๊ณ ๋ ฅ, ํ์ํ ์ฝ๋ฉ๋ ฅ, ํ๋ฉด ์ฆ๊ฐํ๋ ์๊ณ ๋ ฅ, ํ๋ฉด ์ฆ๊ฐํ๋ ์ฝ๋ฉ๋ ฅ, ๋ฌธ์ ํธ๋๋ฐ ๋๋ ์๊ฐ)
max_alp = 0
max_cop = 0
for i in problems:
# ๋ฌธ์ ๋ค ์ค์ ๊ฐ์ฅ ๋์ ํ์ํ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ
max_alp = max(max_alp, i[0])
max_cop = max(max_cop, i[1])
# ํ์ฌ ์ค๋ ฅ ์์์ผํ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ (๊ทผ๋ฐ ์ด์ฐจํผ ๊ฐ์ฅ ์ต์ ์๋์ง? ์์ธ๊ฐ ์๋๋ด)
alp = min(alp, max_alp)
cop = min(cop, max_cop)
# dp[i][j] : (์๊ณ ๋ ฅ i, ์ฝ๋ฉ๋ ฅ j) ์ํ์ ๋๋ฌํ๋ ๋ฐ ํ์ํ ์ต๋จ ์๊ฐ
# ๋๋จธ์ง DP ๋ฐฐ์ด์ ๊ฐ์ ๋ฌดํ(์ ๋นํ ํฐ ๊ฐ)์ผ๋ก ์ด๊ธฐํํ ํ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก DP ๋ฐฐ์ด์ ์
๋ฐ์ดํธ
# dp = [[], [], [] .... , [], []]
dp = [[1e9] * (max_cop + 1) for _ in range(max_alp + 1)]
# ํ์ฌ ๋๋ฌํ๋ ์ต๋จ ์๊ฐ
# dp[์ด๊ธฐ ์๊ณ ๋ ฅ][์ด๊ธฐ ์ฝ๋ฉ๋ ฅ] = 0
dp[alp][cop] = 0
# ๊ถ๊ธ.. ์์๊ฐ dp[alp][cop] ์ด์ ๊ฒ๋ค์ .. ๋ถํ์...ํจ
for i in range(alp, max_alp + 1) :
for j in range(cop, max_cop + 1) :
# ์๊ณ ๋ ฅ ๋ฎ๋ค๋ฉด => ๊ณต๋ถํ๋ฉด 1์๊ฐ ์ฆ๊ฐ
if i < max_alp :
dp[i+1][j] = min(dp[i+1][j], dp[i][j] + 1)
# ์ฝ๋ฉ๋ ฅ ๋ฎ๋ค๋ฉด => ๊ณต๋ถํ๋ฉด 1์๊ฐ ์ฆ๊ฐ
if j < max_cop :
dp[i][j+1] = min(dp[i][j+1], dp[i][j] + 1)
# ๋ฌธ์ ํ๊ธฐ (์์ค์ ๋ง์ง ์๋๋ค๋ฉด ๊ทธ๋งํผ ๊ณต๋ถํ๊ธฐ)
# problems์ ์์๋ [alp_req, cop_req, alp_rwd, cop_rwd, cost]
for alp_req, cop_req, alp_rwd, cop_rwd, cost in problems :
# ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ์ด ์์ค์ ๋ง๋ค๋ฉด
if i >= alp_req and j >= cop_req :
# ๋ฌธ์ ํผ๊ฑฐ์ ๋ํ ์ฆ๊ฐํ๋ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ
nalp = min(i + alp_rwd, max_alp)
ncop = min(j + cop_rwd, max_cop)
# ๋ฌธ์ ํธ๋ ์๊ฐ (๊ฐ๊ฑฐ๋, ์๊ฑฐ๋)
dp[nalp][ncop] = min(dp[nalp][ncop], dp[i][j] + cost)
# alp_req, cop_req ๊ฐ ํด๋นํ๋ฉด ๊ทธ๋งํผ ๋ฌธ์ ์ฌ๋ฌ๋ฒ ํ ์ ์์
# ๊ทธ๋ฌ๋ค๊ฐ ๊ทธ๋ค์ ์์ค์ ํด๋นํ๋ฉด ๋์ด๊ฐ๊ณ , ๊ฐ๊ฐ์ ๋ํ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ ๊ณต๋ถํ๊ธฐ (๊ทธ๋ฌ๋ฉด ๊ทธ ์ ๋ฌธ์ ๋ชป ํ)
# 2 1
# 4 2
# 4 5
# 7 6
# 10 7
# 10 11
# ๊ทธ ์ ์ ๋ชป ํผ์ ๋ค์ ์ต๋์ ์ํด ์ด๋ฏธ ํผ๊ฑธ๋ก ๊ฐ์ฃผ
return dp[max_alp][max_cop]
์ ํ์ฑ
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
์ ํ์ฑ ํ ์คํธ ํ ์คํธ 1 ใ ํต๊ณผ (0.19ms, 10.3MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.23ms, 10.2MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.08ms, 10.3MB) ํ ์คํธ 4 ใ ํต๊ณผ (0.03ms, 10.4MB) ํ ์คํธ 5 ใ ํต๊ณผ (0.15ms, 10.4MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.19ms, 10.3MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.04ms, 10.3MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.03ms, 10.2MB) ํ ์คํธ 9 ใ ํต๊ณผ (0.07ms, 10.4MB) ํ ์คํธ 10 ใ ํต๊ณผ (0.04ms, 10.3MB) ํจ์จ์ฑ ํ ์คํธ ํ ์คํธ 1 ใ ํต๊ณผ (19.69ms, 10.3MB) ํ ์คํธ 2 ใ ํต๊ณผ (28.54ms, 10.5MB) ํ ์คํธ 3 ใ ํต๊ณผ (3.65ms, 10.5MB) ํ ์คํธ 4 ใ ํต๊ณผ (19.72ms, 10.3MB) ํ ์คํธ 5 ใ ํต๊ณผ (128.26ms, 10.3MB) ํ ์คํธ 6 ใ ํต๊ณผ (34.20ms, 10.5MB) ํ ์คํธ 7 ใ ํต๊ณผ (174.21ms, 10.4MB) ํ ์คํธ 8 ใ ํต๊ณผ (139.41ms, 10.3MB) ํ ์คํธ 9 ใ ํต๊ณผ (323.42ms, 10.5MB) ํ ์คํธ 10 ใ ํต๊ณผ (4.49ms, 10.3MB) ์ฑ์ ๊ฒฐ๊ณผ ์ ํ์ฑ: 50.0 ํจ์จ์ฑ: 50.0 ํฉ๊ณ: 100.0 / 100.0
3. ํด์ค
- ๋ฌธ์ ํธ๋ ๊ฒ ์ค์ ์ต๋ ์ฝ๋ฉ๋ ฅ๊ณผ ์๊ณ ๋ ฅ์ ๊ธฐ์ค์ ์ก์
- ์ต๋๋ก ํ์ํ ์ฝ๋ฉ๋ ฅ, ์๊ณ ๋ ฅ ๋ณด๋ค ํฐ ๊ฒ์ ๊ฐ์ง ํ์๊ฐ ์์ (์ต๋ ์๊ฐ์ด๋๊น ๋ ํฌ๋ฉด ์๋จ!)
- ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ ๋ฐ๋ก๋ฐ๋ก ๊ณต๋ถ๋ ฅ์ ์ฆ๊ฐ์์ผ์ผ ํจ
- ๊ธฐ์ค์น์ ๋ง์ ๋๊น์ง for ๋ฌธ์ผ๋ก ๊ณต๋ถ์ํจ๋ค
- ์ต๋์น์ ๋๋ฌํ ๋๊น์ง
๋ฌธ์ ๊ฐ ์์๋๋ก๊ฐ ์๋์ด๋, ์ต๋์ ๊ธฐ์ค์ ์ํด ํผ ๊ฑธ๋ก ๊ฐ์ฃผํด์ ์์ฌ๋ผ๊ฐ.
- ex) 2๋ฒ ๋ง๋?
1 2 3 4 5 6 7 8 9
# ๊ทธ๋ฌ๋ค๊ฐ ๊ทธ๋ค์ ์์ค์ ํด๋นํ๋ฉด ๋์ด๊ฐ๊ณ , ๊ฐ๊ฐ์ ๋ํ ์๊ณ ๋ ฅ, ์ฝ๋ฉ๋ ฅ ๊ณต๋ถํ๊ธฐ (๊ทธ๋ฌ๋ฉด ๊ทธ ์ ๋ฌธ์ ๋ชป ํ) # 2 1 # 4 2 # 4 5 # 7 6 # 10 7 # 10 11 # ๊ทธ ์ ์ ๋ชป ํผ์ ๋ค์ ์ต๋์ ์ํด ์ด๋ฏธ ํผ๊ฑธ๋ก ๊ฐ์ฃผ
This post is licensed under CC BY 4.0 by the author.