[백준 / Java] 1946번: 신입 사원 (그리디)

2025. 2. 14. 04:04·CS & Algorithm

 

코테99 19일차 문제는 백준 1946번 '신입사원'이다.

 


 

문제 이해

  •  테스트 케이스의 개수가 주어진다.
  • 한 케이스에는 지원자의 숫자가 주어지고, 각 지원자의 서류심사 성적과 면접 성적의 순위가 공백을 사이에 두고 주어진다.
  • 이때, 서류 심사 성적과 면접시험 중 적어도 하나가 다른 지원자보다 떨어지지 않으면 선발된다.
  • 선발할 수 있는 최대 인원수를 출력한다.
  • 단, 두 성적 순위는 동석차 없이 결정된다.

 


접근 방법

 

  1. 서류 심사 성적 등수를 기준으로 정렬한다.
  2. 면접 성적 등수를 비교하며 현재 순위가 가장 높은 순위보다 높다면(작으면),
  3. 합격자를 추가하고  높은 순위를 갱신한다.

 


 

알고리즘 진행 순서

 

  1. 테스트케이스를 입력받는다.
  2. 입력받은 지원자 정보를 (서류 순위, 면접 순위) 형태로 저장한다.
  3. 서류 순위를 기준으로 오름차순 정렬한다.
    • 즉, 서류 1등부터 N등까지 순서대로 탐색 가능
  4. 면접 순위 비교를 통해 선발할 수 있는 인원을 체크한다.
    • topRank(현재까지 선발된 사람 중 가장 높은 순위)를 갱신하면서 진행
    • 현재 지원자의 면접 순위 < topRank 이면 선발 가능
    • 선발할 때마다 topRank 를 갱신하면서 진행

 


구현 코드

package Boj;

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

public class Boj1946 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        int T = Integer.parseInt(br.readLine());

        for (int t = 0; t < T; t++) {
            int N = Integer.parseInt(br.readLine());
            int[][] applicants = new int[N][2];
            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine());
                applicants[i][0] = Integer.parseInt(st.nextToken());
                applicants[i][1] = Integer.parseInt(st.nextToken());
            }

            Arrays.sort(applicants, Comparator.comparingInt(a -> a[0]));

            int maxCount = 0;
            int topRank = Integer.MAX_VALUE;

            for (int[] applicant : applicants) {
                int interviewRank = applicant[1];

                if (interviewRank < topRank) {
                    maxCount++;
                    topRank = interviewRank;
                }
            }
            sb.append(maxCount).append("\n");
        }

        System.out.println(sb);
    }
}

 


회고

  • 그리디 문제를 풀 때 어떤 것을 기준으로 정렬 후 다음 기준을 판단하는 지 감을 잡은 것 같다.
  • 조금 더 어려운 문제들로 연습해보자!

'CS & Algorithm' 카테고리의 다른 글

[백준 / Java] 1003번: 피보나치 함수 (DP)  (0) 2025.02.18
[백준 / Java] 19598번: 최소 회의실 개수 (그리디)  (0) 2025.02.15
[백준 / Java] 17053번: 맥주 축제 (그리디)  (0) 2025.02.13
[백준 / Java] 11399번: ATM (그리디)  (0) 2025.02.12
[백준 / Java] 27961번: 고양이는 많을수록 좋다 (그리디)  (0) 2025.02.11
'CS & Algorithm' 카테고리의 다른 글
  • [백준 / Java] 1003번: 피보나치 함수 (DP)
  • [백준 / Java] 19598번: 최소 회의실 개수 (그리디)
  • [백준 / Java] 17053번: 맥주 축제 (그리디)
  • [백준 / Java] 11399번: ATM (그리디)
whatdoyumin
whatdoyumin
안녕하세요, 꾸준히 성장하는 개발자..... 입니다
  • whatdoyumin
    whatdoyumin 님의 블로그
    whatdoyumin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Frontend
      • Backend
      • Study & Course
      • CS & Algorithm
      • DevOps & Infra
      • Certification
      • Database
      • Project
      • atc.
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ResponseEntity
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til
    devops
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til #알고리즘 #브루트포스 #백준 #오목 #완전탐색 #코딩테스트
    완전탐색
    결제로직
    Saa
    타입스크립트
    코드래빗
    코드리뷰자동화
    ai코드리뷰
    백준 #백준2805번 #나무자르기 #이분탐색 #알고리즘
    백트래킹
    TypeScript
    백엔드
    Pruning
    자바스크립트 코테
    탐색알고리즘
    frontend
    Spring
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til#dp#동적계획법#코테#백준
    전역상태관리
    AWS자격증
    coderabbit
    개발자팁
    github자동리뷰
    githubworkflow
    클라우드
    zustand
    브루트포스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
whatdoyumin
[백준 / Java] 1946번: 신입 사원 (그리디)
상단으로

티스토리툴바