🧫 문제 분석
✔️ 출처
📖 문제

문제를 제대로 안읽어서 한 번 틀렸다.
내일 부터 연속으로 최대로 놀 수 있는 기간을 출력하는 건데
최대 놀 수 있는 기간을 출력해버렸다...
과제 마감 시간을 기준으로 내림차순 정렬하여
과제 시작일을 구하고
이전 과제 시작일과 비교해서 현재 과제 시작일을 배치한다.
다 구한 후 마지막으로 구한 이전 과제 시작일 - 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);
}
}
❗ 오답노트 / 필요한 지식
- 문제좀 제발 잘 좀 읽자 제발 제발........
'baekjoon > Greedy' 카테고리의 다른 글
백준 32406번 : 의좋은 형제 [자바] (1) | 2025.07.17 |
---|---|
백준 14943번 : 벼룩 시장 [자바] (1) | 2025.07.03 |
백준 30805번 : 사전 순 최대 공통 부분 수열 [자바] (0) | 2025.04.09 |
백준 1034번 : 램프 [자바] (0) | 2025.03.19 |
백준 19941번 : 햄버거 분배 [자바] (0) | 2025.03.13 |