백준 대회 자리

KIMYEONGJUN·2025년 4월 18일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 테스트 케이스의 개수 K가 주어진다.
각 테스트 케이스는 다음과 같이 구성되어 있다.
첫째 줄에 참가자의 수 P와 자리의 수 M이 주어진다. (1 ≤ P, M ≤ 500)
다음 P개 줄에는 각 참가자가 원하는 자리가 주어진다.
자리는 1번부터 M번까지 있다.
입력으로 주어지는 참가자가 도착하는 순서이다.

각 테스트 케이스에 대해서, 대회에 참가하지 못하는 사람의 수를 출력한다.

내가 이 문제를 보고 생각해본 부분

각 테스트 케이스마다 참가자 수(P)와 자리 수(M)를 입력받는다.
boolean 배열로 각 자리의 선점 여부를 관리한다.
참가자가 도착하는 순서대로 원하는 자리를 확인하여, 비어있으면 선점, 이미 선점되어 있으면 앉지 못하는 사람 수를 증가시킨다.
최종적으로 앉지 못하는 사람 수를 출력한다.

코드로 구현

package baekjoon.baekjoon_27;

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

// 백준 5176번 문제
public class Main995 {
    public static void main(String[] args) throws IOException {
        // BufferedReader, BufferedWriter 사용
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int K = Integer.parseInt(br.readLine()); // 테스트 케이스 수

        for (int t = 0; t < K; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int P = Integer.parseInt(st.nextToken()); // 참가자 수
            int M = Integer.parseInt(st.nextToken()); // 자리 수

            boolean[] seats = new boolean[M + 1]; // 자리 선점 체크 (1부터 M까지)

            int cannotSitCount = 0; // 앉지 못하는 사람 수

            for (int i = 0; i < P; i++) {
                int preferredSeat = Integer.parseInt(br.readLine());

                // 만약 선점된 자리가 아니면 앉기, 아니면 앉지 못함
                if (!seats[preferredSeat]) {
                    seats[preferredSeat] = true;
                } else {
                    cannotSitCount++;
                }
            }

            bw.write(cannotSitCount + "\n");
        }

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

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글