문제
코드
쉽게 풀 수 있는 대표적인 그리디 문제이다.
풀이 방법은 아래와 같다.
- 풀이 방법
- 동전 종류를 배열에 저장한다.
- 배열을 큰 값부터 순회하며 K값보다 작거나 같은 경우 동전을 사용하고 사용한 동전의 개수를 센다.
- 사용한 동전의 개수를 출력한다.
- 걸린 시간: 11분
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _11047 {
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[] coin = new int[N];
for (int i = 0; i < N; i++) {
coin[i] = Integer.parseInt(br.readLine());
}
int i = N-1;
int cnt = 0;
while (K != 0) {
if (K >= coin[i]) {
K -= coin[i];
cnt++;
continue;
}
i--;
}
System.out.println(cnt);
}
}
나누기 연산을 사용하여 더 효율적으로 작성한 코드가 있어서 가져왔다. 알고리즘 문제를 풀다 보면 나누기를 이용하여 효율적으로 풀 수 있는 문제가 많다. 앞으로는 더 효율적으로 풀 수 있는 방법이 있는지 한번 더 고민해봐야겠다.
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[] coins = new int[N];
for (int i = 0; i < N; i++) {
coins[i] = Integer.parseInt(br.readLine());
}
int ans = 0;
int j = N - 1;
for (int i = N - 1; i >= 0; i--) {
if (K >= coins[i]) {
ans += K / coins[i];
K = K % coins[i];
}
}
System.out.println(ans);
}
}
'코딩 테스트 > 알고리즘' 카테고리의 다른 글
[백준] 1743 음식물 피하기(Silver.1) - BFS (0) | 2024.08.06 |
---|---|
[백준] 1303 전쟁 - 전투(Silver.1) - BFS (0) | 2024.08.06 |
[프로그래머스] 42862 체육복(Lv.1) - 그리디(Greedy) (0) | 2024.07.31 |
[백준] 1759 암호 만들기(Gold.5) - 백트래킹(Backtracking) (0) | 2024.07.17 |
[프로그래머스] 84512 모음사전(Lv.2) - 완전 탐색(dfs, 재귀) (0) | 2024.07.17 |