yu-heejin / coding-test

백준, 프로그래머스 코딩 테스트 💻
https://www.mycompiler.io/ko/new/java
1 stars 0 forks source link

[백준] 계란으로 계란치기 #31

Closed yu-heejin closed 5 months ago

yu-heejin commented 6 months ago

https://www.acmicpc.net/problem/16987

yu-heejin commented 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);
    }
}
yu-heejin commented 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;
    }

    @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;
            }
        }
    }
}