2020. 9. 9. 22:18ใ์นดํ ๊ณ ๋ฆฌ ์์
์ด ๋ฌธ์ ๋ 2๋ก ๋จผ์ 2,4,6,8๊ฐ์ 1์ฉ ๋ํ๋ฉด์ ์ฌ๋ฆฌ๊ณ , 3์ผ๋ก ๊ทธ๋ค์์ ์ฌ๋ฆฌ๋ฉด์ ๊ฒน์น๋ ๋ถ๋ถ์ d-3๊ณผ d-2์ ๊ฐ์ ๋น๊ตํด์ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํํ๋ฅผ ์ต์ํ์ผ๋ก ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ต๋ํ ๊ฐ์ด ํฐ๊ฒ์ผ๋ก ๋จผ์ ๋๋ ์ง๋ฉด ๋ชซ์ ์ ์ฅํด์ ์ถ๋ ฅํ๊ณ , ๋ง์ฝ ๋๋ ์ง์ง ์๋๋ค๋ฉด 2์ฉ ๊ณ์ ๋นผ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ ๊ฐ์ฅ ํฐ๊ฐ๋ถํฐ ๋จผ์ ๋๋ ์ฃผ๋๋ฉด ์ด์ฉ ์ ์์ด ํฐ ๊ฐ๋ถํฐ ๋๋๋ ๊ฒ ์ต์ํ์ ๊ฐ์ผ ์ ๋ฐ์ ์๋ค. ์๋ฅผ ๋ค์ด a+b = 18๋ผ๋ ๊ฐ์ด ์๋ค๊ณ ํด๋ณด์. a๊ฐ b๋ณด๋ค ํด๋ a์ ๊ฐ์ ์ต๋ํ์ผ๋ก ๋ง์ด ๋ฃ์ผ๋ฉด์ ๋ฑ์์ด ์ฑ๋ฆฝํด์ผํ๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ b๋ฅผ ์กฐ๊ธ์ฉ ์ฌ๋ฆฌ๋ฉด์ a๊ฐ ๋๋ ์ง๋ ๊ฐ์ด ๋์์ ๋ ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค. ๋ง์ฝ 2์ฉ ๊ณ์ ๋นผ๋ค๊ฐ ๋๋ ์ง์ง ์๋๋ค๋ฉด? ๊ทธ ์๋ ์ ๋๋ก ๋ง๋ค์ด์ง ์ ์๋ ์์ธ ๊ฒ์ด๋ค. 8์ด ์์ ๋ 2์ 5๋ก ๋ง๋ค์ด๋ณธ๋ค๊ณ ํ์. 5๋ฅผ ๋จผ์ ๋๋ด๋๋ฐ ๋๋ ์ง์ง ์์์ 2๋ฅผ ๋นผ๊ณ ๋ ๋ฐ๋ณตํด์ 4,2,0์ด ๋๋ค. ์ ์ ์ ํ๋ค. 2๋ก ๋นผ๋ค๊ฐ 0์ด ๋์ง ์๋๋ค๋ฉด ๋ง๋ค์ด์ง์ง ์๋ ์ ์ธ ๊ฒ์ด๋ค. ์ฝ๋๋ฅผ ํตํด ์์๋ณด์.
1. 1๋ฒ ๋ฐฉ๋ฒ
n,m = map(int,input().split())
array = []
for i in range(n):
array.append(int(input()))
d = [10001] * (m+1)
d[0] =0
for i in range(n):
for j in range(array[i], m+1):
if d[j-array[i]] != 10001:
d[j] = min(d[j], d[j-array[i]]+1)
if d[m] == 10001:
print(-1)
else :
print(d[m])
2. 2๋ฒ ๋ฐฉ๋ฒ
์ 2๋ฒ ๋ฐฉ๋ฒ์ ์๋๋ค. ๋ฐฑ์ค์ ์คํ๋ฌธ์ ์ ๋น๊ตํ์ ๋ ์คํ๋ฌธ์ ๋ ๋ณ์๊ฐ 2๊ฐ์๊ธฐ์ ๊ฐ๋ฅํ ๊ฒ์ด์๋ค. ์ด๊ฑด ๋ณ์๊ฐ 100๊ฐ ๊น์ง ๋ ์ ์์ผ๋ ํ๋ํ๋ ํ๋ฉด ๊ต์ฅํ ๋นํจ์จ์ ์ด๋ค. ์ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์.