문제 & 난이도
- 그리디 알고리즘
- 난이도 : 실버 1
풀이
import java.util.*;
public class Beakjoon1931 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//첫째 즐 : 회의의 수 N
int N = sc.nextInt();
sc.nextLine();
//회의를 저장할 배열
int[][] meetingTimes = new int[N][2];
//둘째 줄 ~ N+1줄 : 각 회의의 정보 (2^31-1)
for (int i = 0; i < N; i++) {
meetingTimes[i][0] = sc.nextInt();
meetingTimes[i][1] = sc.nextInt();
}
//종료 시간 빠른 기준으로 배정하는 알고리즘 사용
//정렬 : 종료 시간 기준
Arrays.sort(meetingTimes, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
//종료 시간이 큰(더 늦은) 경우 뒤로 보낸다.
if(o1[1]> o2[1]) return 1;
//종료 시간이 더 작은(빠른) 경우 그대로 둔다.
else if(o1[1]<o2[1]) return -1;
//종료 시간이 같은 경우
else{
//시작시간이 더 늦으면 뒤로 보내고
if(o1[0] > o2[0]) return 1;
//시작 시간이 더 빠른 경우 그대로 둔다.
else return -1;
}
}
});
//배정
int count = 1; //첫 번째 회의는 무조건 선택되기에 초깃값 1로 설정
int end = meetingTimes[0][1];
for(int i = 1; i<N; i++){
//현재 배정된 회의들의 마지막 끝나는 시간보다 크거나 같은 경우
if(end<=meetingTimes[i][0]){
count++;
end = meetingTimes[i][1];
}
}
System.out.println(count);
}
}
느낀 점
2차원 배열 정렬을 해주는 arrays클래스의 sort메서드를 처음 써봤다.
클래스랑 메서드가 정말 많아서 많이 써보고 기능을 알게 되는 것이 중요한 것 같다.
문제를 단순히 기록하는 용도가 아닌 수시로 블로그를 들어와서 내 코드를 보며 코드 내용을 상기시키자!
'Coding Test > beakjoon' 카테고리의 다른 글
[백준/Java] 11000번 - 강의실 배정 (1) | 2024.09.17 |
---|---|
[백준/Java] 9012번 - 괄호 (0) | 2024.09.17 |
[백준/Java] 2285번 - 우체국 (2) | 2024.09.16 |
[백준/Java] 28278번 - 스택 2 (0) | 2024.09.15 |
[백준/Java] 2164번 - 카드2 (0) | 2024.09.15 |