신입사원

hyeongjun Jo·2023년 2월 14일
0

Backjoon

목록 보기
19/24

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

문제

풀이

서류 등수를 기준으로 정렬하고
정렬한 리스트를 돌면서 면접 최소등수를 가지고 있고
만약 최소등수보다 높으면 통과, 낮으면 탈락으로 판단한다.

코드

students.sort(Comparator.comparingInt(o -> o.first));

서류 등수를 기준으로 오름차순 정렬한다.

int min = N+1;
for (Student student : students) {
    if (min > student.second) {
        // 최소값 갱신
        min = student.second;
        ans++;
    }
}

1등부터 반복하므로 전에 통과한 면접 등수보다 안되면 탈락이다
면접 등수가 높으면(second 값이 작으면) 합격이고 면접 등수를 저장한다

전체코드

baekjoon._1946;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {

    static int T, N;
    static StringBuilder sb = new StringBuilder();

    public static void input() {
        FastReader fr = new FastReader();
        T = fr.nextInt();
        for (int i = 0; i < T; i++) {
            int ans = 0;
            N = fr.nextInt();
            ArrayList<Student> students = new ArrayList<>();
            for (int j = 0; j < N; j++) {
                Student stu = new Student(fr.nextInt(), fr.nextInt());
                students.add(stu);
            }
            students.sort(Comparator.comparingInt(o -> o.first));
            
            int min = N+1;
            for (Student student : students) {
                if (min > student.second) {
                    // 최소값 갱신
                    min = student.second;
                    ans++;
                }
            }
            sb.append(ans);
            sb.append("\n");
        }
        System.out.println(sb);
    }

    public static void main(String[] args) {
        input();
    }

    static class Student {
        int first, second;

        public Student(int first, int second) {
            this.first = first;
            this.second = second;
        }
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader(){ br = new BufferedReader(new InputStreamReader(System.in));}

        String next(){
            while(st == null || !st.hasMoreTokens()){
                try{
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e){
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() { return Integer.parseInt(next()); }

        long nextLong() { return Long.parseLong(next()); }

        Double nextDouble() { return Double.parseDouble(next()); }

        String nextLine(){
            String str = "";
            try{
                str = br.readLine();
            } catch(IOException e){
                e.printStackTrace();
            }
            return str;
        }
    }
}

느낀점

처음엔 서류와 면접 둘 다 정렬한 리스트 두개를 이용할려했는데 서류만 정렬해서 풀 수 있는 문제였다.

profile
DevOps Engineer

0개의 댓글