ALGORITHM

[TIL] 2일차 - 백준 1946 신입사원

연듀 2024. 3. 29. 09:43

https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

class Test implements Comparable<Test>{
    int a, b;
    public Test(int a, int b){
        this.a = a;
        this.b = b;
    }
    @Override
    public int compareTo(Test o){
        return this.a - o.a; // 서류 심사 성적 오름차순 정렬
    }
}
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        while(T-->0){
            int N = Integer.parseInt(br.readLine());
            List<Test> list = new ArrayList<>();
            for(int i=0; i<N; i++){
                StringTokenizer st = new StringTokenizer(br.readLine());
                list.add(new Test(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
            }
            Collections.sort(list);

            int cnt=0;
            int highRank = Integer.MAX_VALUE;
            for(Test t : list){
                if(t.b < highRank){
                    highRank = t.b;
                    cnt++;
                }
            }
            sb.append(cnt).append("\n");
        }
        System.out.println(sb);

    }

}

 

 

 

일단 서류 심사 성적 하나를 기준으로 오름차순 정렬한다.

그리고 서류 심사 성적이 높은 사람부터 면접 심사 성적을 비교하면서

면접 심사 성적 순위가 여태껏 나온 순위중 가장 낮은 순위보다 낮다면 (성적이 제일 높다면) 뽑힌다.

이렇게 하는 이유는 서류 심사 성적 순위가 1등이 아닌 다른 사람은 서류 심사 성적은 무조건 다른 지원자보다 떨어지니까,

면접 심사 성적 순위는 다른 지원자들보다 가장 높아야 뽑히기 때문이다.