그리디 알고리즘이란 현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘이다.
특징은 항상 최적의 해라는 보장은 없다. 잘 따져보지 않으면 반례가 있기 때문
해 선택 : 현재 상태에서 가장 최선이라고 생각되는 해를 선택한다.
적절성 검사 : 현재 선택한 해가 전체 문제의 제약 조건에 벗어나지 않는지 검사한다.
해 검사 : 현재까지 선택한 해 집합이 전체 문제를 해결할 수 있는지 검사한다. 해결하지 못한다면 1로 돌아가서 같은 과정을 반복한다.
https://www.acmicpc.net/problem/11047
import java.util.Scanner;
public class Baekjoon11047 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int[] A = new int[N];
for (int i = 0; i < N; i++) {
A[i] = sc.nextInt();
}
// 큰 동전의 가치만큼 먼저 사용하기
int count = 0;
for (int i = N - 1; i >= 0; i--) {
if (A[i] <= K) {
count += K / A[i];
K %= A[i];
}
}
System.out.println(count);
}
}
https://www.acmicpc.net/problem/1541
public class Baekjoon1541 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int answer = 0;
String[] minus = sc.nextLine().split("-");
for (int i = 0; i < minus.length; i++) {
int sum = 0;
String[] plus = minus[i].split("[+]");
for (int j = 0; j < plus.length; j++) {
sum += Integer.parseInt(plus[j]);
}
if (i == 0) answer = sum;
else answer -= sum;
}
System.out.println(answer);
}
}