๐Ÿ“š Study/Baekjoon

[Silver I] 1495 - ๊ธฐํƒ€๋ฆฌ์ŠคํŠธ

์œฐ๊ฐฑ 2025. 5. 11. 11:33

๋ฌธ์ œ

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 ≤ 50, 1 ≤ M ≤ 1,000, 0 ≤ S ≤ M) ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ๊ณก์ด ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ณผ๋ฅจ์˜ ์ฐจ์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐ’์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , M๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐ€๋Šฅํ•œ ๋งˆ์ง€๋ง‰ ๊ณก์˜ ๋ณผ๋ฅจ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋งˆ์ง€๋ง‰ ๊ณก์„ ์—ฐ์ฃผํ•  ์ˆ˜ ์—†๋‹ค๋ฉด (์ค‘๊ฐ„์— ๋ณผ๋ฅจ ์กฐ์ ˆ์„ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด) -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

3 5 10
5 3 7

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

10

์˜ˆ์ œ ์ž…๋ ฅ 2 ๋ณต์‚ฌ

4 8 20
15 2 9 10

์˜ˆ์ œ ์ถœ๋ ฅ 2 ๋ณต์‚ฌ

-1

์˜ˆ์ œ ์ž…๋ ฅ 3 ๋ณต์‚ฌ

14 40 243
74 39 127 95 63 140 99 96 154 18 137 162 14 88

์˜ˆ์ œ ์ถœ๋ ฅ 3 ๋ณต์‚ฌ

238

# ํ’€์ด ๋ฐฉ๋ฒ•

i๋ฒˆ์งธ ๊ณก๊นŒ์ง€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ณผ๋ฅจ์˜ ์ˆ˜๋ฅผ ๋‹ค ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ˆ„์ ํ•ด๋‚˜๊ฐ€๋Š” ํ˜•์‹์ด๋‹ค.

๊ตฌํ˜„์€ ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค.


# ์ฝ”๋“œ

# 2025-05-11 10:28-11:08
import sys
sys.stdin = open("input.txt","r")

V = []
n,s,m = map(int,sys.stdin.readline().split()) # ๊ณก์˜ ๊ฐœ์ˆ˜ N, ์‹œ์ž‘ ๋ณผ๋ฅจ S, ๊ทธ๋ฆฌ๊ณ  M
V = [0] + list(map(int,sys.stdin.readline().split()

vol_list = [set() for _ in range(n+1)]
vol_list[0].add(s)
for i in range(1, n+1): # ๋ชจ๋“  ๋…ธ๋ž˜
    for v in vol_list[i-1]:
        for next_v in (v-V[i],v+V[i]):
            if 0 <= next_v <= m:
                vol_list[i].add(next_v)

    if len(vol_list[i]) == 0:
        break

if len(vol_list[-1]) == 0: print(-1)
else: print(max(vol_list[-1]))

# ์ฐธ๊ณ 

์ฒซ ์ฝ”๋“œ๋Š” ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต์ด ๋งŽ์•˜๋‹ค. list๋ณด๋‹ค set์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ํšจ์œจ์ 

# 2025-05-11 10:28-11:08
import sys
sys.stdin = open("input.txt","r")

V = []
n,s,m = map(int,sys.stdin.readline().split()) # ๊ณก์˜ ๊ฐœ์ˆ˜ N, ์‹œ์ž‘ ๋ณผ๋ฅจ S, ๊ทธ๋ฆฌ๊ณ  M
V = [0] + list(map(int,sys.stdin.readline().split()))

vol_list = [[] for _ in range(n+1)]
vol_list[0].append(s)
for i in range(1, n+1): # ๋ชจ๋“  ๋…ธ๋ž˜
    for j in range(len(vol_list[i-1])):
        next_v1, next_v2 = vol_list[i-1][j] - V[i], vol_list[i-1][j] + V[i]

        if 0 <= next_v1 <= m and next_v1 not in vol_list[i]: vol_list[i].append(next_v1)
        if 0 <= next_v2 <= m and next_v2 not in vol_list[i]: vol_list[i].append(next_v2)

    if len(vol_list[i]) == 0:
        break

if len(vol_list[-1]) == 0: print(-1)
else: print(max(vol_list[-1]))

'๐Ÿ“š Study > Baekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Gold V] 5430 - AC  (0) 2025.05.15
[Gold V] 16719 - ZOAC  (0) 2025.05.12
[Gold IV] 32187 - ๊ธ‰์‹ ๋ฐฐ์‹  (0) 2025.05.10
[Gold V] 1931 - ํšŒ์˜์‹ค ๋ฐฐ์ •  (0) 2025.05.10
[Gold V] 20207 - ๋‹ฌ๋ ฅ  (0) 2025.05.09