본문 바로가기
Online-Judge/Baekjoon

[Baekjoon] C++ 5176번 대회 자리

by eungbbang 2022. 1. 9.
반응형

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

 

5176번: 대회 자리

이번 ACM-ICPC 대회의 자리는 참가자들이 직접 정한다. 참가자들은 예비 소집일에 자신이 원하는 자리를 미리 정해놓았고, 대회 당일에 어제 적어놓은 자리에 앉으면 된다. 여러명이 같은 자리를

www.acmicpc.net

 

 


 

 

1. 테스트 케이스의 개수 k를 입력받는다.

이후 while문을 한 번 돌 때마다 k의 개수를 하나씩 줄이며 k가 0이 될 때까지 반복한다.

int k = 0;
cin >> k;

while (k--) {
	//여기에 알고리즘 작성
}

 

 

2. while문 안에 참가자의 수 p와 자리의 수 m을 입력받는다.

int p = 0, m = 0;
cin >> p >> m;

 

 

3. 자리의 상태는 누군가 앉아 있거나 혹은 아무도 앉아있지 않거나로 둘 중 하나이다. 따라서 0일 때 아무도 앉아있지 않고, 1일 때 누군가 앉아있는 상태로 체크하기 위해 bool 타입의 배열로 선언한다.

이때 자리는 최대 500석까지 있을 수 있는데, 배열은 0부터 시작하므로 501짜리 배열을 선언하여 자리가 500번까지 생성되도록 한다.

bool arr[501] = {};	//자리

 

 

4. 자리에 앉지 못한 사람의 수를 세기 위해 변수 cnt를 생성해준다.

int cnt = 0;	//자리에 앉지 못한 사람의 수

 

 

5. 참석자의 수 p만큼 for문을 돌며, 이번에 입장한 참가자가 몇 번째 자리를 원하는지 입력받는다.

for (int i = 0; i < p; i++) {
	int now = 0;
	cin >> now;
}

 

 

6. 만약 원하는 자리에 누군가 앉아있다면 cnt를 하나 늘려주고, 아무도 앉아있지 않다면 해당 자리에 앉았다는 의미의 1로 변경한다.

if (arr[now]) cnt++;
else arr[now] = 1;

 

 

7. 모든 참가자가 입장했다면, cnt를 출력한다.

cout << cnt << endl;

 

 


[전체 코드]

#include <iostream>
using namespace std;

int main() {

	int k = 0;
	cin >> k;

	while (k--) {

		int p = 0, m = 0;
		cin >> p >> m;

		bool arr[501] = {};

		int cnt = 0;	//자리에 앉지 못한 사람의 수

		for (int i = 0; i < p; i++) {
			int now = 0;
			cin >> now;
			
			if (arr[now]) cnt++;
			else arr[now] = 1;
		}

		cout << cnt << endl;
	}

}

 

반응형

댓글