입장, 퇴장할 때 기록을 모두 array에 추가한다.
담을 때 입장은 's' 퇴장은 'e' 로 Times클래스로 묶어 추가한다.
시간 순으로 정렬을 하는데 동시간대에 출입은 퇴장('e') -> 입장('s')순으로 정렬한다.
모든 출입 기록을 돌려보면서 cnt가 최대점이 되는 시기가 최대 인원인 경우이다.
문자열 정렬 : 처음엔 's'말고 true, false로 했다가 char로 했다가 정렬 안되길래 String 으로 바꿨다. return this.entrance.compareTo(o.entrance);
package inflearn;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class I0903 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<Times> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
arr.add(new Times(sc.nextInt(), "s"));
arr.add(new Times(sc.nextInt(), "e"));
}
System.out.println(sol(arr, n));
}
static int sol(ArrayList<Times> arr, int n) {
int cnt = 0;
int ans = 0;
Collections.sort(arr);
for (Times t : arr) {
if (t.entrance.equals("s")) {
cnt++;
if (cnt > ans) ans = cnt;
} else cnt--;
}
return ans;
}
static class Times implements Comparable<Times> {
int time;
String entrance;
public Times(int time, String entrance) {
this.time = time;
this.entrance = entrance;
}
@Override
public int compareTo(Times o) {
if (this.time == o.time) {
return this.entrance.compareTo(o.entrance);
} else return this.time - o.time;
}
}
}