[백준/Java] 2457 공주님의 정원

ynco·2024년 12월 16일

백준

목록 보기
7/21


2457

접근법

날짜 변환하는 데에서 원래 일자로 하려고 했는데 이것 때문에 자꾸 헷갈려서 MMDD 형식으로 변환하니 훨씬 깔끔해졌다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;

import static java.util.Collections.sort;


public class Main {

    static class Flower implements Comparable<Flower>{
        int start;
        int end;

        public Flower(int start, int end){
            this.start = start;
            this.end = end;
        }

        @Override
        public int compareTo(Flower o) {
            if (this.start == o.start){
                return o.end-this.end;
            }
            return this.start - o.start;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        ArrayList<Flower> list = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int startM = Integer.parseInt(st.nextToken());
            int startD = Integer.parseInt(st.nextToken());
            int endM = Integer.parseInt(st.nextToken());
            int endD = Integer.parseInt(st.nextToken());

            list.add(new Flower(startM * 100 + startD, endM * 100 + endD));
        }

        Collections.sort(list);

        int startP = 301;
        int endP = 1201;
        int idx = 0;
        int max = 0;
        int ans = 0;

        while (startP < endP){
            boolean flag = false;
            for (int i = idx; i < N; i++){
                Flower current = list.get(i);

                if (current.start > startP) break;
                if (current.end > max) {
                    max = current.end;
                    flag = true;
                    idx = i + 1;
                }
            }

            if (flag) {
                ans++;
                startP= max;
            }
            else break;
        }

        if (max < endP) System.out.println(0);
        else System.out.print(ans);


    }


}

0개의 댓글