자료구조/문제풀이

[백준 JAVA] 14916 거스름돈

휴먼코딩 2024. 8. 1. 20:36

14916 거스름돈

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

문제설명

주어진 금액 N을 5원과 2원 동전으로 정확히 맞추는 방법을 찾는 문제.

동전의 개수를 최소화하여 거스름돈을 맞추어야 하며 N을 정확히 맞출 수 없는 경우엔 -1 출력

접근방식

O(N/2) 시간복잡도

 

.주어진 금액을 2원씩 차감하면서 계산하므로 N이 2원으로 나누어 질 때까지의 시


문제 조건 분석 과정

 

  • 이 5원으로 나누어 떨어지면 5원 동전만으로 맞출 수 있으므로, N을 5로 나눈 몫이 동전의 개수가 된다.
  • N이 5원으로 나누어 떨어지지 않으면, 2원을 차감하여 가능한 경우를 찾는다.
  • 동전 개수를 증가시키면서 NN을 2원씩 차감한다.
  • 5원 동전으로 나머지를 처리할 수 있는 경우엔 출력하고 아니면 -1를 출력한다.

 

  •  

전체코드

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

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        //금액 입력
        int N = Integer.parseInt(st.nextToken());

        //동전의 개수
        int count = 0;

        //금액 N이 0보다 큰 경우
        while (N > 0){
            //N이 5로 나눠떨어지면
            if (N % 5 == 0){
                //N을 5로 나눈 몫만큼 동전을 추가
                count += N / 5;
                break;
            }
            //N이 5로 나눠떨어지지 않으면 2를 차감하고 동전 개수 증가
            N -= 2;
            count++;
        }

        //금액 N이 0보다 작으면 5와 2로 정확히 나눠지지 않는 경우이므로 -` 출력
        if (N < 0){
            System.out.println(-1);
        } else {
            System.out.println(count);
        }

        br.close();
    }
}