본문 바로가기
컴퓨터 공학/백준

[백준] JAVA 자바 : 신입 사원 (1946번)

by kim-dev 2024. 3. 22.
반응형

 


문제는 대략 저렇다.
요약하자면, 서류 순위와 면접 순위가 동시에 그 누구에게도 뒤쳐지지 않는 사람을 뽑는 문제이다.

 

실버1은 아니고 골드5정도 될 것 같은... 사고력을 요구했다...
다행히 나는 풀었는데 어떻게 풀었냐면,

정수 배열을 하나 만든 다음, 서류 순위를 배열의 인덱스로 사용하고, 면접 순위를 배열의 값으로 사용했다.

그리고 배열을 1부터 돌면서 현재 제일 순위가 낮은 사람과 비교해서, 그 사람보다 하나라도 높다면 result에 1을 더한다.
즉 이건 그 배열의 값이 이전의 최대값보다 큰 사람은 탈락이라는 뜻이다.

배열의 인덱스로 사용하는 서류 순서는 따로 비교해 주지 않아도 되는데, 인덱스가 면접 순위를 나타내는데 어차피 배열은 인덱스를 1부터 하나씩 늘려가며 돌기 때문에, 배열의 현재 요소는 지금까지 나온 요소들보다 서류 순위는 더 낮다는 의미이므로 면접 순위만 비교해주면 된다.

import java.lang.StringBuilder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.PriorityQueue;
import java.util.Collections;

public class NewRecruit {

    public static int stoi(String str) {
        return Integer.parseInt(str);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int T = stoi(br.readLine());
        for (int l=0; l<T; l++) {
          
          int N = stoi(br.readLine());
          Integer[] score = new Integer[N+1];
          score[0] = 0;
          
          for(int k=1; k<=N; k++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            score[stoi(st.nextToken())] = stoi(st.nextToken()); // 면접 순위
          }
          
          int checkArr = Integer.MAX_VALUE;
          int result = 0;
          for (int i=1; i<=N; i++) {
            if (score[i] < checkArr) {
              checkArr = score[i];
              result++;
            }
          }
          
          System.out.println(result);
          
        }

        br.close();
    }
}
 

로그인

 

www.acmicpc.net