문제
My Code
import java.io.*;
public class Main {
static int resultNum;
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
// N, K 입력 받기
String str = bf.readLine();
int n = Integer.parseInt(str.split(" ")[0]);
int k = Integer.parseInt(str.split(" ")[1]);
int count = 0; // 동전 개수 변수 선언 및 초기화
int[] arr = new int[n]; // 동전의 가치 배열
// 동전의 가치 입력 받아 배열에 저장
for(int i = 0; i < n; i++){
arr[i] = Integer.parseInt(bf.readLine());
}
//동전의 가치에서 젤 큰 값부터 탐색
int j = n-1;
while(k != 0){
if (arr[j] <= k){ // 동전의 가치보다 K값이 크면 개수 세기
count += k / arr[j];
k = k % arr[j]; // 남은 동전 값에 따라 K값 다시 저장
}
j--;
}
System.out.println(count);
}
}
문제의 핵심 및 알게 된 점
//동전의 가치에서 젤 큰 값부터 탐색
int j = n-1;
while(k != 0){
if (arr[j] <= k){ // 동전의 가치보다 K값이 크면 개수 세기
count += k / arr[j];
k = k % arr[j]; // 남은 동전 값에 따라 K값 다시 저장
}
j--;
}
위의 코드가 최소 동전의 개수를 저장할 수 있는 부분이다.
오름차순이 아닌 내림차순으로 동전 가치 배열을 검색하여 k값과 비교하는 것이 핵심이다.
예를 들면, k = 4200일 경우
arr[j]의 값이 1000일 때 if에 들어갈 것이다.
그럼 count += 4200 / 1000 -> 4가 더해지고
k = 4200 % 1000 -> 200이 저장될 것이다.
다시 저장된 k값으로 while반복문에서 k가 0일 때까지 진행하고 종료한다.
참고 강의_인프런의 Do it! 알고리즘 코딩테스트 with JAVA
'Java' 카테고리의 다른 글
[백준] 1920번 수 찾기 - 이진 탐색 알고리즘/ 함수 이용(재귀X) (0) | 2023.09.06 |
---|---|
[백준] 2178번 미로 탐색 - BFS / 너비 탐색 알고리즘 / 클래스 (0) | 2023.09.05 |
[Java] BFS 구현하기 - 재귀 함수&Queue이용 / 인접 리스트 (1) | 2023.09.02 |
[백준] 11724번 연결 요소의 개수 - DFS방식 / 재귀 함수 이용/ 무방향 그래프 (0) | 2023.09.01 |
[Java] DFS 구현하기 - 재귀 함수 이용 / 인접 리스트 / 배열 (0) | 2023.08.31 |