ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์ฐ์ฃผํ ๊ณก๊ณผ ํ์ฌ ๋ณผ๋ฅจ, ์ต๋ ๋ณผ๋ฅจ๊ณผ ํจ๊ป ๊ฐ ๊ณก์ ์ฐ์ฃผํ ์ ๋ณผ๋ฅจ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ง๋ค. ์กฐ์ ํ ์ ์๋ ๋ณผ๋ฅจ์ ํ์ฌ ์ฐ์ฃผ๊ณก์ด 1๋ฒ์ด๋ผ๋ฉด ๋ณผ๋ฅจ ๋ฆฌ์คํธ 1๋ฒ์ ๋ณผ๋ฅจ ํฌ๊ธฐ๋งํผ ์ถ๊ฐํ๊ฑฐ๋, ๋ํ์ฌ 0๋ณด๋ค ํฌ๊ฑฐ๋ ์ต๋ ๋ณผ๋ฅจ๋ณด๋ค๋ ์์ ๊ฒฝ์ฐ์๋ง ์ฐ์ฃผ๊ฐ ๊ฐ๋ฅํ๋ค. ๋ง์ฝ ์ฐ์ฃผ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค ๋ณด๋ฉด -1์ ์ถ๋ ฅํ์ฌ์ผ ํ๋ค.
์ฒ์ ๋ฌธ์ ๋ฅผ ์ ํ์์ ๋๋ ์ฐ์ฃผํ ์ ์๋ ๋ณผ๋ฅจ์ -ํ๊ฑฐ๋ +ํ์ฌ์ผ ํ๋ฏ๋ก, DFS๋ก ํ์ด์ผ ํ๋ค๊ณ ์๊ฐํ์๋ค. ํ์ง๋ง DFS๋ก ํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ์ฌ ํต๊ณผํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ DP๋ฅผ ํตํด ํ์ด์ผ ํด๋น ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค. ์ด๊ฑธ DP๋ก ์ด๋ป๊ฒ ํ์ง ๊ณ์ ๊ณ ๋ฏผํ๋ค๊ฐ ๋ค๋ฅธ ๋ถ๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ์๋ค.
ํ์ด ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค ๋, list[์ฐ์ฃผํ๋ ๊ณก์ ์][์ต๋ ๋ณผ๋ฅจ]์ผ๋ก 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
- list[0]์ ์๋ฌด๊ฒ๋ ์ฐ์ฃผํ์ง ์์ ์ํ, ์ต์ด์ ๋ณผ๋ฅจ์ ์ ์ฉํ ์ํ์ด๋ฏ๋ก list[0][s] = True์ด๋ค.
- 2์ค ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ฉด์ list[1], list[2] ... ๋ก ์ ๊ทผํ๋ฉฐ ๋ณผ๋ฅจ์ ์ํ๋ฅผ ์ฒดํฌํ๋ค.
-
n * m ๋งํผ์ ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ฉด, list[n]์ ์ต๋ ๋ณผ๋ฅจ์ ์ฒดํฌํ๋ค.
- ๋ง์ฝ list[n]์ ์ฒดํฌ๋ ๋ณผ๋ฅจ์ด ์๋ค๋ฉด, ๋ง์ง๋ง ๊ณก์ ์ฐ์ฃผํ ์ ์๋ ๊ฒ์ด๋ค.
- ์ฆ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํธ๋ฆฌ๋ฅผ ์ํํ๋ ๊ณผ์ ์ 2์ฐจ์ ๋ฐฐ์ด์ ์ฒดํฌํจ์ผ๋ก์จ ๊ฐ๋ฅํ๋ค. ์ด๋ ๋ฐ๋ณต๋ฌธ์ ์ํ๋ง ํ์ํ ์์ ์ด๋ฏ๋ก N*M์ ํฌ๊ธฐ๊ฐ ํฌ์ง ์๋ค๋ฉด DFS๋ณด๋ค ํจ์จ์ ์ผ๋ก ํ์ํ ์ ์๋ค.
์ฝ๋
from sys import stdin
if __name__ == "__main__":
n, s, m = map(int, stdin.readline().split())
v = list(map(int, stdin.readline().split()))
answer = [[False for _ in range(m + 1)] for _ in range(n + 1)]
answer[0][s] = True
for play_song in range(1, n + 1):
for volume in range(m + 1):
if not answer[play_song - 1][volume]:
continue
next_volume = v[play_song - 1]
if volume + next_volume <= m:
answer[play_song][volume + next_volume] = True
if volume - next_volume >= 0:
answer[play_song][volume - next_volume] = True
try:
print(m - answer[-1][::-1].index(True))
except:
print(-1)
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 5557 1ํ๋ (0) | 2020.08.29 |
---|---|
๋ฐฑ์ค: 12865 ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.08.28 |
๋ฐฑ์ค: 11058 ํฌ๋ฆฌ๋ณด๋ (0) | 2020.08.26 |
๋ฐฑ์ค: 2294 ๋์ 2 (0) | 2020.08.26 |
๋ฐฑ์ค: 2293 ๋์ 1 (0) | 2020.08.26 |