[프로그래머스] 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
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • 블로그 꾸미기 (0)
      • Spring (6)
      • 바이브코딩 (1)
      • React (3)
      • CS (0)
      • 알고리즘 (57)
        • 개념 (2)
        • 문제풀이 (54)
      • Java (1)
      • DB (1)
      • log (4)
        • SSAFY (3)
        • 궁금 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    Java
    바이브코딩
    Springsecurity
    lv3
    LIS
    springboot
    BFS
    SSAFY
    프로그래머스
    Spring
    LV2
    느좋코딩
    알고리즘
    싸피
    SSAFY 9기
    dfs
    그리디
    pccp모의고사
    커서ai
    ssafy 합격 후기
    Security
    알고리즘 문제풀이
    너비우선탐색
    백준
    최장증가부분수열
    dp
    리액트
    BOJ
    JWT
    비트마스킹
  • 최근 댓글

  • 최근 글

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

티스토리툴바