문제 풀이/백준

[백준] 1946번. 신입 사원(JAVA)

27200 2025. 2. 1. 21:42

문제

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++를 해주는 방식으로 진행하였다.