[BOJ][๐ก5][๋ฐฑ์ค#02294] ๋์ 2
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
n๊ฐ์ง ์ข ๋ฅ์ ๋์ ์ด ์๋ค. ์ด ๋์ ๋ค์ ์ ๋นํ ์ฌ์ฉํด์, ๊ทธ ๊ฐ์น์ ํฉ์ด k์์ด ๋๋๋ก ํ๊ณ ์ถ๋ค. ๊ทธ๋ฌ๋ฉด์ ๋์ ์ ๊ฐ์๊ฐ ์ต์๊ฐ ๋๋๋ก ํ๋ ค๊ณ ํ๋ค. ๊ฐ๊ฐ์ ๋์ ์ ๋ช ๊ฐ๋ผ๋ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉํ ๋์ ์ ๊ตฌ์ฑ์ด ๊ฐ์๋ฐ, ์์๋ง ๋ค๋ฅธ ๊ฒ์ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ n, k๊ฐ ์ฃผ์ด์ง๋ค. (1 โคย n โค 100, 1 โค k โค 10,000) ๋ค์ n๊ฐ์ ์ค์๋ ๊ฐ๊ฐ์ ๋์ ์ ๊ฐ์น๊ฐ ์ฃผ์ด์ง๋ค.ย ๋์ ์ ๊ฐ์น๋ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๊ฐ์น๊ฐ ๊ฐ์ ๋์ ์ด ์ฌ๋ฌ ๋ฒ ์ฃผ์ด์ง ์๋ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ์ฉํ ๋์ ์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
3 15
1
5
12
์ถ๋ ฅ
3
My Sol
from collections import deque
def main():
def BFS():
Q = deque()
dp = [0]*(T+1)
for coin in coins:
if coin > T: continue
dp[coin] = 1
Q.append(coin)
while Q:
acc = Q.popleft()
for coin in coins:
ssum = acc+coin
if ssum > T: continue
if dp[ssum]: continue
dp[ssum] = dp[acc]+1
Q.append(ssum)
return dp[T] if dp[T] else -1
N, T = map(int, input().split())
coins = sorted(list(set([int(input()) for _ in range(N)])), reverse=True)
return BFS()
print(main())
๋น์ฐํ DP ๋ฌธ์ ์ผ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ณ , ๋ฌธ์ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ ์ ์์๋ DP๋ก ํด๊ฒฐํ๋ผ๊ณ ๋์์๋๋ฐ, ๋๋ BFS๋ฅผ ์ด์ฉํด ํ์๋ค.
๋๋ฆ 2,835๋ช ์ค ์ฐ์ฐ์๊ฐ 9๋ฑ์ด๋ ๊ทธ๋ฆฌ ๋์ ์ฝ๋๋ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. (์ฌ์ง์ด ๋๋ณด๋ค ์ฐ์ฐ์๊ฐ์ด ๋ ๋น ๋ฅธ ๋๋ถ๋ถ์ ์ฝ๋๋ค์ ๋ชจ๋ BFS๋ก ํ์์์ ํ์ธํ๋ค.)
- ์ ๋ ฅ์ ๋ฐ๊ณ , ์ ์๋ ๋์ ๋ค์ set์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํ ๋ค, list, sorted-reversed๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค.
- ๋ชฉํ๊ฐ์ธ
T
๋ณด๋ค ํฌ์ง ์์ ๋์ ๋ค ์ ์์ deque์ ๋์ ๋ค์ ์ง์ด๋ฃ๊ณ , ์ด๋ฅผ ํ์ธํ๋dp
๋ฐฐ์ด์ ํ์ํ๋ค. - ๋์ ํฌ๊ธฐ๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ ์ด์ deque์ ๋ฃ์ ๋์ ๊ธ์ก์ ๋ํด ๋์ ๋ค์ ๊ฐ๊ฐ ๋์
ํด ์นด์ดํธ๋ฅผ ์ถ๊ฐํ๋ค. ์ฆ, ํด๋น ๊ธ์ก์ ๋ง๋ค๊ธฐ ์ํ ์ต์ ๋์ ๊ฐ์๋ฅผ ๊ตฌํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ฏธ
dp
๋ฐฐ์ด์ ํน์ ๊ธ์ก์ ํน์ ๊ฐ์ด ์๋ค๋ฉด, ๊ทธ ๊ธ์ก์ ๋ง๋ค๊ธฐ ์ํ ์ต์ ๊ฐ์์ด๋ฏ๋ก ์ด๋ฏธ ๊ฐ์ด ์๋ค๋ฉด ๋์ด๊ฐ๋ค. ์ฆ,visited
์ ์ญํ ์ ํ๋ ๋ฐฐ์ด์ด๋ค.๊ทธ๋ฐ๋ฐ dp๋ผ๊ณ ์ด๋ฆ ๋ถ์ธ ์ด์ ๋ ์ด์ ์ DP๋ก ํ์๋ ๊ธฐ๋ก ๋๋ฌธโฆใ ใ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ๊ณผ์ ์์ ๋์ ๊ธ์ก์ดT
๋ณด๋ค ํฌ๋ค๋ฉด ๋ถ๊ธฐ์ฒ๋ฆฌํด์ ๋์ด๊ฐ๋ค. - ๋ชจ๋ ์ํ๋ฅผ ๋ง์น๊ณ
dp[T]
์ ๊ฐ์ returnํ๋๋ฐ, ์ด๋ ๊ฐ์ด 0์ด๋ฉด ์ด๊ธฐ๊ฐ์ด๊ณ , ํด๋น ๋์ ๊ธ์ก์ ๋ง๋ค ์ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก -1์ ๋ฐํํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ