코딩 테스트/백준

[백준] 14916번: 거스름돈 (실버5, 그리디 알고리즘, JAVA)

Nirsa 2024. 1. 3. 23:50
반응형

 

문제 링크 : https://www.acmicpc.net/problem/14916

 

[백준] 14916번: 거스름돈 (실버5, 그리디 알고리즘, JAVA)

count 변수를 선언하여 최종적으로 출력한 동전의 최소 개수를 구합니다. while true를 사용하여 무한루프를 실행시키고, 각각의 조건식은 다음과 같습니다.

  1. N%5 == 0 && N != 0
    5로 나누어 떨어지고, N이 0이 아닐 경우에는 count를 증가시키고 N에서 5를 감소시킵니다.
  2. N/2 >= 1
    N의 값에서 2를 나눳을 때 최소 1번 이상 나누어질 경우 count를 증가시키고 N에서 2를 감소시킵니다.
  3. N != 0
    N의 값이 0이 아닐 경우 -1를 출력하고 반복문을 종료합니다.
  4. 그 외의 경우에는 N에 대한 모든 계산이 끝나고 나누어 떨어지는 경우이므로 count를 출력하고 종료합니다.
public class Main {
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    	int N = Integer.parseInt(br.readLine());
    	int count = 0;
    	
    	while(true) {
    		if(N%5 == 0 && N != 0) { // 5원 거스름돈이 1번이상 가능할 때
    			count++;
    			N = N-5; // 5로 나누고나서의 나머지값을 저장
    		} else if(N/2 >= 1) { // 2원 거스름돈이 1번 이상 가능할 때
    			count++;
    			N = N-2; // 2로 나누고나서의 나머지값을 저장
    		} else if(N != 0) {
    			System.out.println("-1");
    			break;
    		} else {
    			System.out.println(count);
    			break;
    		}
    	}
    }
}

 

반응형