import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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 K = Integer.parseInt(st.nextToken());
int index = N - 1;
int[] Money = new int[N];
for(int i = 0 ; i < Money.length; i++) {
Money[i] = Integer.parseInt(br.readLine());
}
int cnt = 0;
while(K > 0) {
if(K < Money[index]) {
index--;
}
else if(K >= Money[index]) {
cnt += (K / Money[index]);
K %= Money[index];
}
}
System.out.println(cnt);
}
}
○ 문제 요약
입력받은 K의 값을 입력받은 N의 값으로 나눴을 때 나올 수 있는 최솟값을 출력해라.
○ 문제 풀이
알고리즘 분류는 그리디 알고리즘이고 이전에 풀은 ATM 문제와 같은 알고리즘이다.
특별히 어려운 부분은 없지만 while문은 보고 지나가고 싶다.
while문의 조건을 보면 K가 0보다 클 때까지 수행하고
만약 Money[index]의 값이 K보다 크다면 작거나 같아질 때까지 index-- 한다.
else if 조건을 성립하면 K / Money[index]한 값을 cnt += (K/Money[index]) 해주고
K % Money[index] 값을 다시 K에 넣어줘 이 과정을 반복해서 수행하도록 한다.
그러면 K가 0보다 작아졌을 때,
while문을 탈출하고 cnt를 출력해주면 최솟값을 출력할 수 있다.
○ 결과
'문제풀이 > 백준' 카테고리의 다른 글
백준 1932. 정수 삼각형 (JAVA) (0) | 2022.04.04 |
---|---|
백준 19947. 투자의 귀재 배주형 (JAVA) (DP) (0) | 2022.04.02 |
백준 15649. N과 M(1)(JAVA) (0) | 2022.03.30 |
백준 9461. 파도반 수열(JAVA) (2) | 2022.03.29 |
백준 1003. 피보나치 함수(JAVA) (2) | 2022.03.28 |