문제
https://www.acmicpc.net/problem/1946
풀이(12분)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int t = Integer.parseInt(br.readLine());
for(int i = 0; i < t; i++){
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[n][2];
for (int j = 0; j < n; j++) {
st = new StringTokenizer(br.readLine());
arr[j][0] = Integer.parseInt(st.nextToken()); // 첫 번째 값
arr[j][1] = Integer.parseInt(st.nextToken()); // 두 번째 값
}
// 0번째 값을 기준으로 오름차순 정렬
Arrays.sort(arr, (o1, o2) -> Integer.compare(o1[0], o2[0]));
int answer = 1;
int min = arr[0][1];
for(int j = 1; j < n; j++){
if(arr[j][1] > min){
continue;
}
answer++;
min = arr[j][1];
}
System.out.println(answer);
}
}
}
문제 초반 살짝 헤매었지만 점수가 아니라 순위라는 것을 알아두자!!
풀이는 간단하다. 일단 입력을 받은 뒤 하나의 점수를 기준으로 오름차순으로 정렬하자.
문제에서 제시된 첫 번째 예제를 표로 나타내면 다음과 같다.
<정렬 전>
서류심사 성적 | 면접 성적 | |
1 | 3 | 2 |
2 | 1 | 4 |
3 | 4 | 1 |
4 | 2 | 3 |
5 | 5 | 5 |
<정렬 후>
서류심사 성적 | 면접 성적 | |
2 | 1 | 4 |
4 | 2 | 3 |
1 | 3 | 2 |
3 | 4 | 1 |
5 | 5 | 5 |
위와 같이 정렬된다.
이렇게 되었을 때, 서류심사 성적을 올려가며 조회할 때 이 전에 면접 성적 중에 최저(서류 심사 성적은 안 좋으나 면접 성적은 가장 좋은 사람)의 면접 성적보다 높아야 한다.
즉, 반복문을 진행하며 면접 성적의 최저값을 기록한 뒤 이것보다 낮다면 answer++를 해주는 방식으로 진행하였다.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 2210번. 숫자판 점프(JAVA) (1) | 2025.02.02 |
---|---|
[백준] 1347번. 미로 만들기(JAVA) (0) | 2025.02.02 |
[백준] 1850번. 최대공약수(JAVA) (0) | 2025.01.30 |
[백준] 1105번. 팔(JAVA) (0) | 2025.01.25 |
[백준] 22862번. 가장 긴 짝수 연속한 부분 수열 (large)(JAVA) (1) | 2025.01.23 |