풀이
- 다른 모든 지원자와 비교했을 때, 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다.
- 완탐 돌린다고 생각
- 처음에 이중 for문으로 진짜 다 비교했는데 시간초과 뜸
- 2차원 배열 정렬 후, 어쨌든 서류심사 성적이 1등인 사람은 무조건 합격이니까 cnt=1로 두고, 그 사람의 면접시험 성적
arr[0][1]
을 초기값으로 두고, for 문 한번으로 돌림.
- 기준이 되는 면접시험 성적보다 작은 수(즉, 높은 등수) 가 나오면 cnt++ 해주고, 기준을 그 수로 바꿈.
코드
import java.util.*;
import java.io.*;
public class BOJ1946 {
public static void main(String[] args) throws Exception{
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 cnt = 0;
int[][] arr = new int[N][2];
for(int j=0;j<N;j++){
st = new StringTokenizer(br.readLine());
int resume = Integer.parseInt(st.nextToken());
int myun = Integer.parseInt(st.nextToken());
arr[j][0] = resume;
arr[j][1] = myun;
}
Arrays.sort(arr, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0];
}
});
cnt = 1;
int sec = arr[0][1];
for(int k=1;k<N;k++){
int temp = arr[k][1];
if(sec>temp){
cnt++;
sec = temp;
}
}
System.out.println(cnt);
}
}
}
- 진짜 쉬운문제인데 ... 오래걸렸다 ^_^ㅠ 졸려서라고 생각..할거야.....