내가 생각했을때 문제에서 원하는부분
첫째 줄에 테스트 케이스의 개수 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.