1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
처음에는 입력받은 시작 시간과 종료 시간의 차이가 짧은 순으로 정렬을 하려고 했다.
회의 시간이 짧을수록 다른 회의가 더 많이 진행될 수 있다는 생각을 했기 때문이었는데
그렇게 하다보니 반복문도 너무 많이 나오고
리스트의 길이가 길어질 때 반복문을 도는 횟수가 훅 훅 늘어났다.
그래서 다른 사람의 풀이를 참고했다.
회의 종료 시간을 기준으로 정렬을 하면 한 회의의 종료시간과 다른 회의의 시작시간을 비교하면 끝이라
간단하게 코드를 짤 수 있었다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Main {
static class Meet implements Comparable<Meet>{
int start;
int end;
public Meet(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Meet o) {
if(this.end > o.end) {
return 1;
}
else if(this.end == o.end) { //회의가 시작하자마자 끝나는 경우
if(this.start > o.start) {
return 1;
}
}
return -1;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int count = 0;
int time = 0;
String temp;
String[] temp2;
ArrayList<Meet> arr = new ArrayList<>();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
temp = br.readLine();
temp2 = temp.split(" ");
int start = Integer.parseInt(temp2[0]);
int end = Integer.parseInt(temp2[1]);
arr.add(new Meet(start, end));
}
Collections.sort(arr);
for(Meet s: arr) {
if(s.start>=time) {
count++;
time = s.end;
}
}
sb.append(count);
System.out.println(sb);
}
}
'ALGORITHM' 카테고리의 다른 글
백준 8958 OX퀴즈 (Java) (0) | 2023.01.26 |
---|---|
백준 1547 공 (Java) (0) | 2023.01.25 |
백준 5585 거스름돈 (Java) (0) | 2023.01.23 |
백준 1085 직사각형에서 탈출 (Java) (0) | 2023.01.22 |
백준 1436 영화감독 숌 (Java) (0) | 2023.01.21 |