[Algorithm] 99클럽 코테 스터디 19일차 TIL BOJ 1946

김성은·2025년 2월 13일

항해 99 TIL

목록 보기
19/22
post-thumbnail

문제

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

풀이

문제 분석

  • 주어지는 각각의 숫자는 서류/면접 성적의 순위이다
  • 서류 성적을 바탕으로 오름차순으로 정렬한 후 자신의 서류 성적의 순위보다 높은 순위를 가지는 지원자의 면접 성적의 순위가 자신의 면접 성적의 순위보다 높은 경우 해당 지원자는 선발될 수 없다
    • 나의 서류 성적 등수 > 상대의 서류 성적 등수 && 나의 면접 성적 등수 > 상대의 면접 성적 등수
  • 이 때 탐색을 한번만 진행하면 되는데, 그 이유는 오름차순으로 정렬했기 때문에 특정 서류 성적 등수보다 높은 사람들의 면접 성적 등수는 최소값만 고려하여 비교하면 되기 때문이다
    • 예) 서류 성적이 3등인 사람이 있다. 1, 2등의 면접 등수가 각각 5, 6등 이라면 서류 성적이 3등인 사람의 면접 점수 등수는 5보다 무조건 커야한다.

코드

import java.io.*;
import java.util.*;

class Assignment {
    public int paper;
    public int interview;

    public Assignment(int paper, int interview) {
        this.paper = paper;
        this.interview = interview;
    }
}


public class Main {
    private static int T;
    private static int N;


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        T = Integer.parseInt(st.nextToken());

        while(T>0) {
            st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            Assignment[] assignments = new Assignment[N];
            int answer = 0;

            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine());
                int paper = Integer.parseInt(st.nextToken());
                int interview = Integer.parseInt(st.nextToken());
                assignments[i] = new Assignment(paper, interview);
            }

            Arrays.sort(assignments, Comparator.comparingInt(o -> o.paper));
            int minInterviewRank = assignments[0].interview;
            answer++;

            for(int i=1 ; i<N; i++) {
                if(minInterviewRank > assignments[i].interview) {
                    minInterviewRank = assignments[i].interview;
                    answer++;
                }
            }

            bw.write(answer+"\n");
            T--;
        }

        bw.flush();
        bw.close();
    }
}

TIL

  • 문제를 이해하는데 오래걸렸던 문제이다.
  • 주어진 숫자가 성적의 등수라는 것을 문제를 읽고도 이해하는데 어려웠다
  • 문제를 조금 더 깔끔하게 서류 결과에 대한 등수, 면접 결과에 대한 등수라고 나누어 명시했으면 좋았겠다 라는 생각이 들었다.
  • 보통 입력값 부분은 숫자의 범위를 파악하기 위해서 자세히 읽는데 주어진 숫자가 등수(순위)라는 것이 입력값 부분에 설명되어 있어 이를 다시 확인하느라 애를 먹었다,,
profile
백엔드 개발자가 되고 싶은 눈송이입니다

0개의 댓글