목차
- 개요
- 본문
- 1) 문제
- 2) 과정
- 3) 코드 전체
개요
이전에 알고리즘 스터디에서 JAVA를 이용해 백준 14916번 거스름돈을 풀었습니다. 이를 정리해보고자 합니다.
본문
1) 문제
2) 과정
ATM을 풀고 풀어서 그런지 조금 더 쉽게 문제를 풀었던 것 같습니다.
이 또한 10분도 채 안되어서 끝냈던 문제입니다.
2-1) main
public static void main(String[] args) throws IOException {
// Input
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
// Initialize
int ans = -1;
// Logic
for(int i=n/5;i>=0;i--){
int except5 = n-(5*i);
if(except5%2==0) {
ans = except5/2+i;
break;
}
}
// Output
System.out.println(ans);
}
main은 Input, Initialize, Logic, Output으로 구성됩니다.
Input은 이번엔 간단하게 숫자만 받아오는 문제이기도 하고 어려워 보이지 않아서 Scanner를 사용했습니다.
Initialize에서는 거슬러 줄 수 없다면 -1을 출력하라고 했기 때문에 ans는 -1로 초기값을 넣어줬습니다.
Logic부분에서는 2원동전과 5원 동전을 이용해 최소한의 동전만 사용하도록 하는 것이기 떄문에 전체값을 5로 나눈 것의 몫부터 0이 될 때까지 그 수를 줄여나가며 except5에 5원을 계산하고 남은 금액을 넣고, except5를 2로 나눈 것의 나머지가 0일 때는 ans에 except5 나누기 2의 몫과 현재 5원짜리 동전의 개수인 i를 더해준 뒤 for문을 빠져나오도록 합니다. 5원짜리 동전이 가장 많을 때부터 계산한 것이기 때문에 다른 경우를 살필 필요없이 except5를 2로 나눈것의 나머지가 없다면 종료하고 값을 출력할 수 있습니다.
Output부분에서는 Logic을 통해 계산된 최소한의 동전 수 ans를 출력하며 종료합니다.
3) 전체코드
그렇게 완성된 코드는 다음과 같습니다.
package sujeong.greedy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class BOJ14916 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int ans = -1;
for(int i=n/5;i>=0;i--){
int except5 = n-(5*i);
if(except5%2==0) {
ans = except5/2+i;
break;
}
}
System.out.println(ans);
}
}
깃헙으로 더 자세히 보고싶으시다면, 아래 링크를 참고해주세요 :)
https://github.com/Park1122/Algorithm-Study/blob/master/sujeong/greedy/BOJ14916.java
'알고리즘(JAVA 사용) > Greedy' 카테고리의 다른 글
[알고리즘풀이]백준 1931: 회의실 배정 JAVA (0) | 2021.10.05 |
---|---|
[알고리즘풀이]백준 1715: 카드 정렬하기 JAVA (0) | 2021.10.05 |
[알고리즘풀이]백준 1541: 잃어버린 괄호 JAVA (0) | 2021.10.05 |
[알고리즘풀이]백준 11399: ATM JAVA (0) | 2021.10.05 |
[알고리즘풀이]백준 11047: 동전 0 JAVA (0) | 2021.10.05 |