문제 분석
- 조건 해석:
- 각 지원자는 서류 성적과 면접 성적을 가지고 있습니다.
- 두 지원자 A와 B가 있을 때, A가 B보다 서류 성적과 면접 성적이 모두 떨어지면 A는 선발되지 않습니다.
- 이 조건을 만족하는 최대 선발 인원수를 구하는 문제입니다.
- 핵심 아이디어:
- 서류 성적을 기준으로 정렬한 후, 면접 성적을 기준으로 선발 가능성을 확인합니다.
- 즉, 서류 성적이 좋은 순서대로 정렬하고, 그 뒤에서 면접 성적이 좋거나 나쁜지 확인하면서 선발 조건을 만족하는지 검사합니다.
- 면접 성적은 서류 성적 순으로 진행되므로, 면접 성적이 이전 지원자보다 더 좋으면 선발될 수 있습니다.
알고리즘 흐름
- 서류 성적을 기준으로 정렬합니다.
- 서류 성적 순으로 진행하면서, 면접 성적이 이전 면접 성적보다 좋다면 해당 지원자는 선발됩니다.
- 최종적으로 선발된 지원자 수를 출력합니다.
코드 구현
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); // 테스트 케이스 수
while (T-- > 0) {
int N = sc.nextInt(); // 지원자 수
int[][] applicants = new int[N][2]; // 지원자의 서류 성적과 면접 성적
for (int i = 0; i < N; i++) {
applicants[i][0] = sc.nextInt(); // 서류 성적
applicants[i][1] = sc.nextInt(); // 면접 성적
}
// 서류 성적 기준으로 오름차순 정렬
Arrays.sort(applicants, (a, b) -> a[0] - b[0]);
int count = 1; // 첫 번째 지원자는 무조건 선발
int bestInterview = applicants[0][1]; // 첫 번째 지원자의 면접 성적
for (int i = 1; i < N; i++) {
// 현재 지원자의 면접 성적이 이전에 선발된 지원자보다 좋으면 선발
if (applicants[i][1] < bestInterview) {
count++;
bestInterview = applicants[i][1];
}
}
System.out.println(count); // 선발된 지원자의 수 출력
}
}
}
시간 복잡도
- 각 테스트 케이스마다 서류 성적을 기준으로 N개의 지원자를 정렬하므로 정렬 시간은 O(N log N)입니다.
- 그 후에 한 번의 선발 과정에서 N개의 지원자를 순차적으로 확인하므로 시간 복잡도는 O(N)입니다.
- 따라서 각 테스트 케이스의 시간 복잡도는 O(N log N)입니다.
'Algorithm' 카테고리의 다른 글
백준 11000번: 강의실 배정 (1) | 2025.03.06 |
---|---|
백준 1260번: 단어 수학 (0) | 2025.03.06 |
백준 1260번: 카드 정렬하기 (0) | 2025.03.06 |
백준 1931번: 회의실 배정 (1) | 2025.02.24 |
트리 정렬(Tree Sort) (0) | 2025.02.19 |