1) Activity Selection Problem


2) 거스름돈 (동전의 개수 가장 적게)


1) Activity Selection Problem
// 알고리즘 - 그리디 알고리즘
// Activity Selection Problem
import java.util.ArrayList;
import java.util.Collections;
class Activity {
String name;
int start;
int end;
public Activity(String name, int start, int end) {
this.name = name;
this.start = start;
this.end = end;
}
}
public class Main {
public static void selectActivity(ArrayList<Activity> list) {
// 종료시간 기준 오름차순 정렬
Collections.sort(list, (x1, x2) -> x1.end - x2.end);
int curTime = 0;
ArrayList<Activity> result = new ArrayList<>();
for (Activity item: list) {
// 활동의 시작 시간이 현재 시간보다 작으면 추가
if (curTime <= item.start) {
// 다음 활동 시간 비교를 위해 현재 활동의 종료 시간으로 업데이트
curTime = item.end;
result.add(item);
}
}
// 출력
for (Activity item: result) {
System.out.print(item.name + " ");
}
System.out.println();
}
public static void main(String[] args) {
// Test code
ArrayList<Activity> list = new ArrayList<>();
list.add(new Activity("A", 1, 5));
list.add(new Activity("B", 4, 5));
list.add(new Activity("C", 2, 3));
list.add(new Activity("D", 4, 7));
list.add(new Activity("E", 6, 10));
selectActivity(list);
}
}
2) 거스름돈 (동전의 개수 가장 적게)
// 거스름돈 문제
import java.util.HashMap;
import java.util.Map;
public class Main2 {
// receviedMoney: 지불받은 돈, price: 물건의 가격
public static void getChangeCoins(int receivedMoney, int price) {
// 동전 종류
final int[] coins = {500, 100, 50, 10, 5, 1};
HashMap<Integer, Integer> result = new HashMap<>();
// 잔돈
int change = receivedMoney - price;
int cnt = 0;
for (int i = 0; i < coins.length; i++) {
// 동전 단위가 잔돈보다 크면 continue
if (change < coins[i]) {
continue;
}
// 해당 동전 개수
int q = change / coins[i];
result.put(coins[i], result.getOrDefault(coins[i], 0) + q);
// 남은 잔돈
change %= coins[i];
// 거스름돈 동전 개수 업데이트
cnt += q;
}
System.out.println("거스름돈 동전 개수: " + cnt);
for (Map.Entry<Integer, Integer> cur: result.entrySet()) {
System.out.println(cur.getKey() + ": " + cur.getValue());
}
}
public static void main(String[] args) {
// Test code
getChangeCoins(1000, 100);
getChangeCoins(1234, 500);
}
}