Closed yu-heejin closed 5 months ago
import java.io.*;
import java.util.*;
class Egg {
int durability;
int weight;
public Egg(int durability, int weight) {
this.durability = durability;
this.weight = weight;
}
}
public class Main {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<Egg> eggs = new ArrayList<>();
String[] input;
for (int i = 0; i < n; i++) {
input = br.readLine().split(" ");
eggs.add(new Egg(Integer.parseInt(input[0]), Integer.parseInt(input[1])));
}
int answer = 0;
for (int i = 0; i < n; i++) {
// 가장 왼쪽의 계란
Egg leftEgg = eggs.get(i);
// 손에 든 계란이 깨진 경우 깨지 않고 넘어간다.
if (leftEgg.durability <= 0) {
answer++;
continue;
}
for (int j = 0; j < n; j++) {
if (i == j) continue;
// 다음 계란
Egg nextEgg = eggs.get(j);
// 이미 깨진 계란인 경우 continue
if (nextEgg.durability <= 0) continue;
// 손에 든 계란의 무게보다 내구도가 작은 계란을 때린다.
if (leftEgg.weight >= nextEgg.durability) {
nextEgg.durability -= leftEgg.weight;
leftEgg.durability -= nextEgg.weight;
}
// 내구도가 0이 된 경우 계란이 꺠진다.
if (nextEgg.durability <= 0) {
answer++;
}
}
}
System.out.println(answer);
}
}
import java.io.*;
import java.util.*;
class Egg {
int durability;
int weight;
public Egg(int durability, int weight) {
this.durability = durability;
this.weight = weight;
}
@Override
public String toString() {
return durability + ", " + weight;
}
}
public class Main {
private static List<Egg> eggs = new ArrayList<>();
private static int n;
private static int max = Integer.MIN_VALUE;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
String[] input;
for (int i = 0; i < n; i++) {
input = br.readLine().split(" ");
eggs.add(new Egg(Integer.parseInt(input[0]), Integer.parseInt(input[1])));
}
dfs(0);
System.out.println(max);
}
private static void dfs(int index) {
// 손에 든 계란이 마지막 계란인 경우
if (index == n - 1) {
int count = 0;
// 얼마나 깨졌는지 확인
for (Egg egg : eggs) {
if (egg.durability <= 0) {
count++;
}
}
max = Math.max(max, count);
return;
}
Egg curr = eggs.get(index);
// 이미 깨진 계란인 경우 하지 않음
if (curr.durability <= 0) {
dfs(index + 1);
} else {
// 현재 든 계란을 기준으로 계란을 하나씩 깬다.
for (int i = 0; i < n; i++) {
// 현재 계란과 같은 계란인 경우 continue
if (i == index) continue;
Egg egg = eggs.get(i);
// 이미 깨진 계란인 경우 continue
if (egg.durability <= 0) continue;
// 계란을 깬다
egg.durability -= curr.weight;
curr.durability -= egg.weight;
dfs(index + 1);
egg.durability += curr.weight;
curr.durability += egg.weight;
}
}
}
}
https://www.acmicpc.net/problem/16987