문제 보기
https://www.acmicpc.net/problem/2457
풀이
1. 정렬 방법
flowers.sort(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[2] == o2[2]) {
return o2[3] - o1[3];
}
return o2[2] - o1[2];
}
});
시작, 끝이 주어지기 때문에 정렬 기준을 무엇으로 해야 할지 감이 안 잡힐 수 있다.
나는 끝나는 날짜를 기준으로 내림차순 정렬을 했다.
유효기한이 긴 순으로 살펴보며 개화 시기가 이전 꽃이 진 날 보다 작거나 같은 것을 찾았다.
2. 비교 방법
int prevMonth = 3;
int prevDay = 1;
int count = 0;
while (prevMonth < 12) {
for(int i = 0; i < flowers.size(); i++) {
if(prevMonth > flowers.get(i)[0] || (prevMonth == flowers.get(i)[0] && prevDay >= flowers.get(i)[1])) {
count++;
prevMonth = flowers.get(i)[2];
prevDay = flowers.get(i)[3];
flowers.remove(flowers.get(i));
break;
}
if(i == flowers.size() - 1) {
count = 0;
}
}
if(count == 0 || (prevMonth < 12 && flowers.isEmpty())) {
count = 0;
break;
}
}
끝나는 날짜가 그날까지 핀다가 아니라 그전 날까지 핀다기 때문에 유의해야 한다.
11월 30일 까지가 조건이기 때문에 마지막 지는 날은 무조건 12월이 넘어야 한다.
이전 꽃이 진 시기를 저장해놓고 계속 비교해 가며 카운트하였다.
꽃을 마지막까지 순회했는데도 다음 꽃을 찾지 못했거나
모든 꽃을 다 소비했을 경우 count를 0으로 하고 빠져나오도록 했다.
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
List<int[]> flowers = new ArrayList();
while (n-- > 0) {
String[] inputs = br.readLine().split(" ");
flowers.add(new int[]{
Integer.parseInt(inputs[0]), Integer.parseInt(inputs[1]), Integer.parseInt(inputs[2]), Integer.parseInt(inputs[3])});
}
flowers.sort(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[2] == o2[2]) {
return o2[3] - o1[3];
}
return o2[2] - o1[2];
}
});
int prevMonth = 3;
int prevDay = 1;
int count = 0;
while (prevMonth < 12) {
for(int i = 0; i < flowers.size(); i++) {
if(prevMonth > flowers.get(i)[0] || (prevMonth == flowers.get(i)[0] && prevDay >= flowers.get(i)[1])) {
count++;
prevMonth = flowers.get(i)[2];
prevDay = flowers.get(i)[3];
flowers.remove(flowers.get(i));
break;
}
if(i == flowers.size() - 1) {
count = 0;
}
}
if(count == 0 || (prevMonth < 12 && flowers.isEmpty())) {
count = 0;
break;
}
}
bw.write(count + "\n");
bw.flush();
bw.close();
}
}
GitHub 링크
'ProblemSolve > 항해99 코테스터디' 카테고리의 다른 글
99클럽 코테 스터디 7일차 TIL (미들러): [프로그래머스][Java] 모음사전 - level2 (0) | 2024.11.03 |
---|---|
99클럽 코테 스터디 6일차 TIL (챌린저): [백준][Java] 2458 키 순서 - 골드4 (0) | 2024.11.02 |
99클럽 코테 스터디 5일차 TIL (미들러): [백준][Java] 24444 알고리즘 수업 - 너비 우선 탐색 1 - 실버2 (0) | 2024.11.01 |
99클럽 코테 스터디 4일차 TIL (챌린저): [백준][Java] 1865 웜홀 - 골드3 (0) | 2024.11.01 |
99클럽 코테 스터디 4일차 TIL (미들러): [백준][Java] 24479 알고리즘 수업 - 깊이 우선 탐색 1 - 실버2 (0) | 2024.10.31 |