[이코테][Java] 만들 수 없는 금액

2025. 2. 14. 17:41·PS/이코테

문제 설명

N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요.

 

입력조건

  • 첫째 줄에 동전의 개수를 나타내는 양의 정수 N(1 <= N <= 1,000)
  • 둘째 줄에 각 동전의 화폐단위를 나타내는 N개의 자연수

출력조건

  • 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값

입출력 예시

입력예시 출력예시
5
3 2 1 1 9
8

 

 

 

 

문제 풀이

  • 입력받은 n개의 동전들을 오름차순 정렬한 후, 동전들로 1부터 차례대로 특정 금액(target)을 만들 수 있는지 확인한다.
  • target >= (현재 동전금액) 일 경우, 현재 동전으로 target을 만들 수 있다 → target 값 업데이트
  • 여기서 target이 특정 값일 때, 1 ~ (target-1)까지의 모든 금액을 만들 수 있다고 가정한다.

 

예시) n=5, {3, 2, 1, 1, 9}

동전을 오름차순 정렬하면 {1, 1, 2, 3, 9}이다.

오름차순 정렬한 동전을 순서대로 확인하면서 특정 금액 target을 만들 수 있는지 확인한다.

1) target = 1, coin = 1

  • coin 1원이 추가되어 1원을 만들 수 있다. → 1 == 1
  • target = target + coin = 1 + 1 =2 로 업데이트
  • 현재 가지고 있는 동전 {1}

2) target = 2, coin = 1

  • 이전 단계를 통해 현재 가지고 있는 동전으로 1원까지 만들 수 있다. 
  • coin 1원이 추가되어 1, 2원을 만들 수 있다. → 2 > 1
  • target = target + coin = 2 + 1 = 3 으로 업데이트
  • 현재 가지고 있는 동전 {1, 1}

3) target = 3, coin = 2

  • 이전 단계를 통해 현재 가지고 있는 동전으로 1 ~ 2원까지 만들 수 있다.
  • coin 2원이 추가되어 1, 2, 3, 4원을 만들 수 있다. → 3 > 2
  • target = target + coin = 3 + 2 = 5 으로 업데이트
  • 현재 가지고 있는 동전 {1, 1, 2}

3) target = 5, coin = 3

  • 이전 단계를 통해 현재 가지고 있는 동전으로 1 ~ 4원까지 만들 수 있다.
  • coin 3원이 추가되어 1, 2, 3, 4, 5, 6, 7 원을 만들 수 있다. → 5 > 3
  • target = target + coin =  5 + 3 = 8 으로 업데이트
  • 현재 가지고 있는 동전 {1, 1, 2, 3}

4) target = 8, coin = 9

  • 이전 단계를 통해 현재 가지고 있는 동전으로 1 ~ 7원까지 만들 수 있다.
  • coin 9원이 추가되어 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16 원을 만들 수 있다. → 8 < 9

따라서 만들 수 없는 최소값은 8이 된다.

import java.io.*;
import java.util.*;

public class Main1 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());    //동전의 개수
        ArrayList<Integer> coins = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            coins.add(Integer.parseInt(st.nextToken()));
        }

        Collections.sort(coins);

        int target = 1;
        for (int i = 0; i < coins.size(); i++) {
            if (target < coins.get(i)) {	//target이 coin보다 작으면 target을 만들 수 없다.
                break;
            } else {	//target이 coin보다 크거나 같으면 target을 만들 수 있으므로 target 업데이트
                target += coins.get(i);
            }
        }

        bw.write(target + "\n");
        bw.flush();
        bw.close();
    }
}

[참고]

- 이것이 취업을 위한 코딩 테스트다 with 파이썬 by 나동빈

- https://kk-programming.tistory.com/11

 

[이코테-그리디] 기출 - 04. 만들 수 없는 금액

[문제] 동네 편의점의 주인인 동빈이는 N개의 동전을 가지고 있습니다. 이때 N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요. 예를 들어, N=5 이고

kk-programming.tistory.com

 

저작자표시 비영리 변경금지 (새창열림)

'PS > 이코테' 카테고리의 다른 글

[이코테][Java] 금광  (0) 2025.04.10
[이코테][Java] 경쟁적 전염  (0) 2025.02.14
[이코테][Java] 무지의 먹방 라이브  (0) 2025.02.14
[이코테][Java] 볼링공 고르기  (0) 2025.02.14
[이코테][Java] 고정점 찾기  (0) 2025.02.12
'PS/이코테' 카테고리의 다른 글
  • [이코테][Java] 금광
  • [이코테][Java] 경쟁적 전염
  • [이코테][Java] 무지의 먹방 라이브
  • [이코테][Java] 볼링공 고르기
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (70) N
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (52) N
        • 백준 (12) N
        • 프로그래머스 (0)
        • SQL (9)
        • 이코테 (31)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[이코테][Java] 만들 수 없는 금액
상단으로

티스토리툴바