๐Ÿ”Ž

๋‹ต์•ˆ

import java.util.Arrays; import java.util.Comparator; import java.util.PriorityQueue; public class Main { public static void main(String[] args) { int N = 6; int[][] reading = {{1, 3}, {2, 5}, {7, 8}, {4, 12}, {9, 10}, {7, 11}}; int[] answer = solution(N, reading); System.out.println(answer[0] + " " + answer[1]); } public static int[] solution(int N, int[][] reading) { int[] answer = new int[2]; // ํ•˜๋ฃจ์— ์ตœ๋Œ€ ๋ช‡ ๋ช…์ด ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•จ Arrays.sort(reading, new Comparator<int[]>() { @Override public int compare(int[] start, int[] end) { if(start[1] == end[1]){ return Integer.compare(start[0], end[0]); } return Integer.compare(start[1], end[1]); } }); int cnt = 0; int end = -1; for (int i = 0; i < N; i++) { if (reading[i][0] >= end) { end = reading[i][1]; cnt++; } } answer[0] = cnt; // ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ฑ…์„ ์ฝ๊ธฐ ์œ„ํ•ด ๋นŒ๋ ค์•ผ ํ•˜๋Š” ์ตœ์†Œ ๋Œ€์ถœ ๊ถŒ์ˆ˜ Arrays.sort(reading, new Comparator<int[]>() { @Override public int compare(int[] start, int[] end) { if(start[0] == end[0]){ return Integer.compare(start[1], end[1]); } return Integer.compare(start[0], end[0]); } }); PriorityQueue<Integer> pq = new PriorityQueue<>(); for (int i = 0; i < N; i++) { if (!pq.isEmpty() && pq.peek() <= reading[i][0]){ pq.poll(); } pq.add(reading[i][1]); } answer[1] = pq.size(); return answer; } }

1. ๋ฌธ์ œ ํŒŒ์•…

  1. ํ•˜๋ฃจ์— ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ•™์ƒ์˜ ์ˆ˜์™€ ๋ชจ๋“  ํ•™์ƒ์ด ์ฑ…์„ ์ฝ๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์ฑ…์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฑ…์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ๊ณผ ์ข…๋ฃŒํ•˜๋Š” ์‹œ์ ์— ๋”ฐ๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  1. ํ•˜๋‚˜์˜ ์—ด์ด ์ •๋ ฌ๋  ๋•Œ ๋‹ค๋ฅธ ์—ด๋„ ํ•จ๊ป˜ ๋ณ€๋™๋ผ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Comparator๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  1. ํ•œ ๋ช…์˜ ํ•™์ƒ์ด ์ฑ…์„ ๋‹ค ์ฝ์œผ๋ฉด ๋‹ค๋ฅธ ํ•™์ƒ์ด ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. ํ’€์ด

  1. ์ฑ…์€ ํ•œ ๊ถŒ๋งŒ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ช…์˜ ํ•™์ƒ์ด ์ฑ…์„ ๋‹ค ์ฝ์—ˆ์„ ๋•Œ ๋‹ค๋ฅธ ํ•™์ƒ์ด ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข…๋ฃŒ์‹œ๊ฐ„์ด ๋น ๋ฅผ์ˆ˜๋ก ๋‹ค๋ฅธ ํ•™์ƒ์ด ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋” ๋งŽ์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
    1. Arrays.sort(reading, new Comparator<int[]>() { @Override public int compare(int[] start, int[] end) { if (start[1] == end[1]){ return Integer.compare(start[0], end[0]); } return Integer.compare(start[1], end[1]); } });
       
  1. ํ•œ ๋ช…์ด ์ฑ…์„ ๋‹ค ์ฝ์œผ๋ฉด ๊ณง๋ฐ”๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒํ•œํ…Œ ์ฑ…์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ๊ณ , ๋‹ค์‹œ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ํ•™์ƒ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์„ ๋„˜๊ธธ ๋•Œ๋งˆ๋‹ค ํ•™์ƒ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. int cnt = 0; int end = -1; for (int i = 0; i < N; i++) { if (reading[i][0] >= end) { end = reading[i][1]; cnt++; } }
       
  1. ๋‹ค๋ฅธ ์ฑ…์„ ๋นŒ๋ ค์„œ๋ผ๋„ ๋ชจ๋“  ํ•™์ƒ๋“ค์ด ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฑ…์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ช…์ด 3์‹œ์— ์ฑ…์„ ๋‹ค ์ฝ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ํ•™์ƒ์ด 2์‹œ๋ถ€ํ„ฐ ์ฑ… ์ฝ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ฑ…์„ ํ•œ ๊ถŒ ๋” ๋Œ€์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    1. Arrays.sort(reading, new Comparator<int[]>() { @Override public int compare(int[] start, int[] end) { if(start[0] == end[0]){ return Integer.compare(start[1], end[1]); } return Integer.compare(start[0], end[0]); } });
       
  1. ์ฑ…์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์€ ํ•™์ƒ๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , ์–ด๋–ค ํ•™์ƒ์ด ๋‚ด๊ฐ€ ์ฑ…์„ ์ฝ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๋” ๋นจ๋ฆฌ ์ฑ…์„ ์ฝ๊ฒŒ ๋˜๋ฉด ๊ทธ ์ฑ…์„ ์ด์–ด์„œ ์ฝ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์œ„ํ•ด์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    1. for (int i = 0; i < N; i++) { if (!pq.isEmpty() && pq.peek() <= reading[i][0]){ pq.poll(); } pq.add(reading[i][1]); }
       
  1. ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์—ญํ• ์ด ํ•™์ƒ๋“ค์—๊ฒŒ ์ฑ…์„ ๋ฐฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ํฌ๊ธฐ๊ฐ€ ์ฑ…์˜ ์ตœ์†Œ ๋Œ€์ถœ ๊ถŒ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    1. answer[1] = pq.size();