그리디 알고리즘
현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘
032. 동전 개수의 최솟값 구하기(백준 11047번)
이 문제는 그리디 알고리즘으로 풀 수 있도록 뒤에 동전 가격 A가 앞에 나오는 동전 Ai-1의 배수가 된다는 조건을 부여했다.
즉, 동전을 최소로 사용하여 K를 만들기 위해서는 가장 가격이 큰 동전부터 차례대로 사용하면 된다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = sc.nextInt();
}
int count = 0;
for(int i=n-1; i>=0; i--) {
if(arr[i] <= k) {
count += (k/arr[i]);
k = k % arr[i];
}
}
System.out.println(count);
}
}
036. 최솟값을 만드는 괄호 배치 찾기(백준 1541번)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String expression = sc.nextLine(); // "55-50+4"
String[] strArr = expression.split("-"); // ["55", "50+4"]
int answer = 0;
for(int i=0; i<strArr.length; i++) {
int temp = mySum(strArr[i]);
if(i == 0) answer += temp;
else answer -= temp;
}
System.out.println(answer);
}
private static int mySum(String str) {
int sum = 0;
String[] temp = str.split("[+]"); // ["50", "4"]
for(int i=0; i<temp.length; i++) {
sum += Integer.parseInt(temp[i]);
}
return sum;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2751번] 수 정렬하기 2(Java) (4) | 2024.10.28 |
---|---|
[백준 10989번] 수 정렬하기 3(Java) (0) | 2024.10.28 |
[백준 2750번, 1427번] 정렬(Java) (0) | 2024.10.24 |
[백준 1874번, 2164번] 스택과 큐(Java) (0) | 2024.10.21 |
[백준 1806번] 부분합(Java) (1) | 2024.10.20 |