[프로그래머스] 12907 거스름돈 - JAVA

2025. 7. 2. 16:18·알고리즘/문제풀이

[프로그래머스] 12907 거스름돈 - JAVA


문제

https://school.programmers.co.kr/learn/courses/30/lessons/12907

 

문제 분석

조건

`n`원을 거슬러 줘야 할 때, 보유하고 있는 동전의 종류 `money`를 이용하여 거슬러 줄 수 있는 방법의 가짓수를 구하는 문제이다.

풀이방법

DP를 이용해서 조합의 수를 구하는 문제이다. `dp[i]`는 i원을 만들 수 있는 경우의 수이다. `dp[0] = 1`으로 0원을 거슬러주는 방법은 아무동전도 사용하지 않으므로 1가지 방법이 있다. 코드를 기준으로 예제1번을 순차적으로 진행하면 가진 동전의 종류는 `[1, 2, 5]`이고 목표 금액은 5원이다.

1. 1원짜리로 만들 수 있는 경우의 수

dp = [1, 1, 1, 1, 1, 1]

2. 2원짜리로 만들 수 있는 경우의 수

dp = [1, 1, 2, 2, 3, 3]

2원짜리 동전으로 5원을 만드는 새로운 경우의 수를 구한다고 해보자. 이는 이미 계산된 3원을 만드는 경우의 수(dp[3])에 2원짜리 동전을 하나 추가하는 것과 같다. 따라서 dp[5]에 dp[3]의 값을 더해주는 것이다.

 

코드

class Solution {
    public int solution(int n, int[] money) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for (int coin : money) {
            for (int i = coin; i <= n; i++) {
                dp[i] = (dp[i] + dp[i - coin]) % 1000000007;
            }
        }
        return dp[n];
    }
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/문제풀이' 카테고리의 다른 글
  • [프로그래머스] 84021 퍼즐 조각 채우기 - JAVA
  • [백준/BOJ] 1202 보석 도둑- JAVA
  • [백준/BOJ] 20058 마법사 상어와 파이어스톰 - JAVA
  • [프로그래머스] 1843 사칙연산 - JAVA
LIRI
LIRI
  • LIRI
    기록
    LIRI
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 블로그 꾸미기 (0)
      • Spring (6)
      • React (3)
      • CS (0)
      • 알고리즘 (57)
        • 개념 (2)
        • 문제풀이 (54)
      • Java (1)
      • DB (1)
      • log (4)
        • SSAFY (3)
        • 궁금 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    알고리즘 문제풀이
    싸피
    알고리즘
    LIS
    SSAFY
    불 끄기
    springboot
    dp
    dfs
    도대체왜
    ssafy 합격 후기
    리액트
    백준
    Java
    골드1
    Spring
    BFS
    프로그래머스
    그리디
    Springsecurity
    SSAFY 9기
    너비우선탐색
    lv3
    Security
    비트마스킹
    LV2
    최장증가부분수열
    JWT
    pccp모의고사
    BOJ
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
LIRI
[프로그래머스] 12907 거스름돈 - JAVA
상단으로

티스토리툴바