๐ค๋ฌธ์ ํด๊ฒฐ
1. S1 | ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
2. ๊ฐ๊ฐ์ ์ฐ์ฃผ ์ฐจ๋ก์ ๊ฐ๋ฅํ ๋ณผ๋ฅจ์ ์ ์ฅํ๊ธฐ ์ํด 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
3. ๋ฆฌ์คํธ๋ฅผ ์ค๋ช ํ์๋ฉด ๋งจ ์ฒซ์ค(i = 0)์ ์ฐ์ฃผ ์์์ ๋จ๊ณ์ด๊ณ ๊ฐ์ด 0์ด ์๋๋ผ 1์ธ ๋ถ๋ถ์ ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ณผ๋ฅจ์ด๋ค. ํ์ฌ ํ ์คํธ์ผ์ด์ค ์์(S=5)๋ก ์์ฑ๋์ผ๋ฏ๋ก [0][5] = 1 ์ด๋ค.
4. ํ ์คํธ์ผ์ด์ค: ์์๊ฐ 5, ์ต๋๊ฐ 10, ์ฐ์ฃผ๋ฆฌ์คํธ = [5, 3, 7]
5. ์ฒซ๋ฒ์งธ ์ฐ์ฃผ๋ฅผ ํ๊ธฐ ์ ์ ๋ณผ๋ฅจ์ ๋ฐ๊พผ๋ค. ํ์ฌ ๋ณผ๋ฅจ์ 5, ์ฒซ๋ฒ์งธ ์ฐ์ฃผ ๋ณผ๋ฅจ์ 5 ์ด๋ฏ๋ก 5+5 = 10, 5-5 = 0 ์ผ๋ก ๋๋ค 0๋ณด๋ค ํฌ๊ณ 10๋ณด๋ค ์์ผ๋ฏ๋ก ์๋์ ๊ฐ์ด ์ ์ฅํ ์ ์๋ค.
6. ์ฒซ๋ฒ์งธ ์ฐ์ฃผ๋ฅผ ํ๊ธฐ ์ ์ ๋ณผ๋ฅจ์ ๋ฐ๊พผ๋ค. ์ฒซ๋ฒ์งธ์ ๋ค๋ฅธ์ ์ ํ์ฌ ๋ณผ๋ฅจ์ด 2๊ฐ์ง(0๊ณผ 10)์ด๋ค. ๋จผ์ ํ์ฌ ๋ณผ๋ฅจ์ 0, ๋๋ฒ์งธ ๋ณผ๋ฅจ์ 3 ์ด๋ฏ๋ก 0+3 = 3, 0-3 = -3 ์ผ๋ก 3๋ง ์ ํํ ์ ์๋ค. ๋ค์ ํ์ฌ ๋ณผ๋ฅจ์ 10, ๋๋ฒ์งธ ๋ณผ๋ฅจ์ 3 ์ด๋ฏ๋ก 10+3 = 13, 10-3 = 7 ์ผ๋ก 7๋ง ์ ํํ ์ ์๋ค.
7. ์ด๋ ๊ฒ ํ๋ค๋ณด๋ฉด ๋ง์ง๋ง์๋ ์๋์ ๊ฐ์ด ๋์ค๊ฒ ๋๊ณ ๋ง์ง๋ง ํ์์ ๊ฐ์ด 1์ธ ๊ฐ์ฅ ํฐ ์ธ๋ฑ์ค๋ฅผ ์ ํํ์ฌ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ๊ฐ์ด 1์ธ ๋ถ๋ถ์ด ์๋ค๋ฉด -1(๋ง์ง๋ง ์ฐ์ฃผ๋ฅผ ๋ชปํ ๊ฒฝ์ฐ)๋ฅผ ์ถ๋ ฅํ๋ค.
๐จ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ํญ์ ์ด๋ ต๋ค. ๋จผ์ ์ฌ๊ท๋ก ํ์ด๋ดค๋๋ ์ญ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๐ป์์ค ์ฝ๋
def volume():
for i in range(1, N + 1):
for j in range(M + 1):
# print(i, j)
# ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๋ณผ๋ฅจ(๊ฐ์ด 1์ธ ๊ฒฝ์ฐ)์์๋ง ์์ํ ์ ์๋ค!
if dp[i - 1][j] == 0:
continue
# ๋ณผ๋ฅจ์ ์ฌ๋ฆฌ๋ ๊ฒฝ์ฐ
if j + V[i - 1] <= M:
dp[i][j + V[i - 1]] = 1
# ๋ณผ๋ฅจ์ ๋ด๋ฆฌ๋ ๊ฒฝ์ฐ
if j - V[i - 1] >= 0:
dp[i][j - V[i - 1]] = 1
# for row in dp:
# print(row)
# print()
def answer():
# ๋ง์ง๋ง์ค์ ๋ณผ๋ฅจ(๊ฐ์ด1) ์ด ์์ด์ผ ์ฐ์ฃผ๊ฐ ๊ฐ๋ฅํ ๊ฒ!!! ์๋๋ฉด -1์ ์ถ๋ ฅ
for i in range(M, -1, -1):
if dp[-1][i] == 1:
print(i)
return
else:
print(-1)
if __name__ == "__main__":
N, S, M = map(int, input().split())
V = list(map(int, input().split()))
# ์ต๋๋ณผ๋ฅจ(M)๊น์ง ๊ฐ ๋
ธ๋๋ง๋ค ๊ฐ๋ฅํ ๋ณผ๋ฅจ ์ ์ฅ
dp = [[0] * (M + 1) for _ in range(N + 1)]
# 0๋ฒ์งธ ํ์ ๋
ธ๋ ์์์
# 1๋ฒ์งธ ํ๋ถํฐ ์ฒซ ๋
ธ๋ ์์
dp[0][S] = 1
# ๊ฐ๋ฅํ ๋ณผ๋ฅจ ์ ์ฅ ํ๊ธฐ
volume()
# ๋ง์ง๋ง ์ฐ์ฃผ ๋์ ๊ฐ์ฅ ํฐ ๋ณผ๋ฅจ
answer()
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/1495
๋ฌธ์
Day Of Mourning์ ๊ธฐํ๋ฆฌ์คํธ ๊ฐํ ๋ ๋ค๊ฐ์ค๋ ๊ณต์ฐ์์ ์ฐ์ฃผํ N๊ฐ์ ๊ณก์ ์ฐ์ฃผํ๊ณ ์๋ค. ์ง๊ธ๊น์ง ๊ณต์ฐ๊ณผ๋ ๋ค๋ฅธ ๊ณต์ฐ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ ์ด๋ฒ ๊ณต์ฐ์์๋ ๋งค๋ฒ ๊ณก์ด ์์ํ๊ธฐ ์ ์ ๋ณผ๋ฅจ์ ๋ฐ๊พธ๊ณ ์ฐ์ฃผํ๋ ค๊ณ ํ๋ค.
๋จผ์ , ๊ณต์ฐ์ด ์์ํ๊ธฐ ์ ์ ๊ฐ๊ฐ์ ๊ณก์ด ์์ํ๊ธฐ ์ ์ ๋ฐ๊ฟ ์ ์๋ ๋ณผ๋ฅจ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์๋ค. ์ด ๋ฆฌ์คํธ๋ฅผ V๋ผ๊ณ ํ์ ๋, V[i]๋ i๋ฒ์งธ ๊ณก์ ์ฐ์ฃผํ๊ธฐ ์ ์ ๋ฐ๊ฟ ์ ์๋ ๋ณผ๋ฅจ์ ์๋ฏธํ๋ค. ํญ์ ๋ฆฌ์คํธ์ ์ ํ ์ฐจ์ด๋ก๋ง ๋ณผ๋ฅจ์ ๋ฐ๊ฟ ์ ์๋ค. ์ฆ, ํ์ฌ ๋ณผ๋ฅจ์ด P์ด๊ณ ์ง๊ธ i๋ฒ์งธ ๊ณก์ ์ฐ์ฃผํ๊ธฐ ์ ์ด๋ผ๋ฉด, i๋ฒ ๊ณก์ P+V[i]๋ P-V[i] ๋ก ์ฐ์ฃผํด์ผ ํ๋ค. ํ์ง๋ง, 0๋ณด๋ค ์์ ๊ฐ์ผ๋ก ๋ณผ๋ฅจ์ ๋ฐ๊พธ๊ฑฐ๋, M๋ณด๋ค ํฐ ๊ฐ์ผ๋ก ๋ณผ๋ฅจ์ ๋ฐ๊ฟ ์ ์๋ค.
๊ณก์ ๊ฐ์ N๊ณผ ์์ ๋ณผ๋ฅจ S, ๊ทธ๋ฆฌ๊ณ M์ด ์ฃผ์ด์ก์ ๋, ๋ง์ง๋ง ๊ณก์ ์ฐ์ฃผํ ์ ์๋ ๋ณผ๋ฅจ ์ค ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ชจ๋ ๊ณก์ ๋ฆฌ์คํธ์ ์ ํ ์์๋๋ก ์ฐ์ฃผํด์ผ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, S, M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100, 1 ≤ M ≤ 1000, 0 ≤ S ≤ M) ๋์งธ ์ค์๋ ๊ฐ ๊ณก์ด ์์ํ๊ธฐ ์ ์ ์ค ์ ์๋ ๋ณผ๋ฅจ์ ์ฐจ์ด๊ฐ ์ฃผ์ด์ง๋ค. ์ด ๊ฐ์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , M๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐ๋ฅํ ๋ง์ง๋ง ๊ณก์ ๋ณผ๋ฅจ ์ค ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ง์ง๋ง ๊ณก์ ์ฐ์ฃผํ ์ ์๋ค๋ฉด (์ค๊ฐ์ ๋ณผ๋ฅจ ์กฐ์ ์ ํ ์ ์๋ค๋ฉด) -1์ ์ถ๋ ฅํ๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 7569. ํ ๋งํ (0) | 2020.08.26 |
---|---|
[python] ๋ฐฑ์ค - 2251. ๋ฌผํต (0) | 2020.08.25 |
[python] ๋ฐฑ์ค - 11660. ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (0) | 2020.08.23 |
[html] ๊ณต๋ฐฑ ๋ฌธ์, ๋์ด์ฐ๊ธฐ (2) | 2020.08.22 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๊ธฐ๋ฅ๊ณผ ๋ณด ์ค์น(2020 KAKAO BLIND RECRUITMENT) (1) | 2020.08.22 |