티스토리 뷰

알고리즘 공부/백준

백준 2293번

_Yunhwan 2022. 10. 29. 22:18

https://www.acmicpc.net/problem/2293

 

2293번: 동전 1

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.

www.acmicpc.net

n,k = map(int,input().split())

arr = [int(input()) for i in range(n)]
dp = [0]*(k+1)


#arr 맨 처음 수로 만들 수 있는 숫자들이 있다면 +1 해줌
for i in range(k+1):
  if i%arr[0]==0:
    dp[i]+=1


# arr의 남은 원소들 사용
for i in range(1,n):
  cur = arr[i]
  # 1부터 k까지 반복
  for j in range(1,k+1):
    # cur이 j이상일 때 (dp[j-cur]음수 방지) 
    if j>=cur:
      #기존 dp[j]에 dp[j-cur]을 더해 줌
      dp[j] = dp[j] + dp[j-cur]


print(dp[k])

arr의 맨 처음 수를 이용하여 k까지 조합해서 만들 수 있는 수들에 +=1을 해주면서 dp설정

 

이 후 arr의 두번 째 수 부 터는 설정 시켜준 dp를 이용함

ex) dp[j] = dp[j] + dp[j-cur]

기존 dp에 dp[j-cur]을 더해줌

 

 

'알고리즘 공부 > 백준' 카테고리의 다른 글

백준 1541번  (0) 2022.10.29
백준 1931번  (0) 2022.10.29
백준 1038번  (1) 2022.10.29
백준 1016번  (0) 2022.10.29
백준 1456번  (0) 2022.10.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함