baekjoon/Greedy

백준 7983번 : 내일 할거야 [자바]

Meluu_ 2025. 7. 4. 11:05

 

 

🧫 문제 분석

 

✔️ 출처

내일 할거 골드 5

 

📖 문제

 

문제를 제대로 안읽어서 한 번 틀렸다.

내일 부터 연속으로 최대로 놀 수 있는 기간을 출력하는 건데

최대 놀 수 있는 기간을 출력해버렸다...

 

과제 마감 시간을 기준으로 내림차순 정렬하여

과제 시작일을 구하고

이전 과제 시작일과 비교해서 현재 과제 시작일을 배치한다.

 

다 구한 후 마지막으로 구한 이전 과제 시작일 - 1 이 내일부터 놀 수 있는 기간이다.

 


🔅 문제 풀이

// 코드 내용import java.io.*;
import java.util.*;

public class Main {
    // 계산은 long

    static class Assigment implements Comparable<Assigment> {
        int d, t;

        public Assigment(int d, int t) {
            this.d = d;
            this.t = t;
        }

        @Override
        public int compareTo(Assigment o) {
            if (t == o.t) {
                return d - o.d;
            }

            return o.t - t;
        }
    }

    // A < C < B
    // 머리 배 가슴
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        PriorityQueue<Assigment> pq = new PriorityQueue<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int d = Integer.parseInt(st.nextToken());
            int t = Integer.parseInt(st.nextToken());

            pq.add(new Assigment(d, t));
        }


        int preWorkstartDay = -1;
        while (!pq.isEmpty()) {
            Assigment current = pq.poll();

            // 작업 시작 시간 구하기
            int workday = current.t - current.d + 1;

            // 첫 이전 과제 갱신 
            if (preWorkstartDay == -1) {
                preWorkstartDay = workday;
                continue;
            }

            // 이전 과제 시작 날이 현재 과제 마감일과 같거나 작다면
            if (preWorkstartDay <= current.t) {
                 preWorkstartDay = preWorkstartDay - 1 - current.d + 1;

            } else {
                preWorkstartDay = workday;
            }
        }

        System.out.println(preWorkstartDay - 1);
    }

}

 

 

 

❗ 오답노트 / 필요한 지식

  1.  문제좀 제발 잘 좀 읽자 제발 제발........