[BOJ] 1946 신입사원

iinnuyh_s·2023년 10월 11일
0

구현

목록 보기
1/2

신입사원

풀이

  • 다른 모든 지원자와 비교했을 때, 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다.
  • 완탐 돌린다고 생각
  • 처음에 이중 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);
        }

    }
}
  • 진짜 쉬운문제인데 ... 오래걸렸다 ^_^ㅠ 졸려서라고 생각..할거야.....

0개의 댓글