[백준 1453] 피시방 알바 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
피시방에 자리가 부족할 때 손님을 거절하는 경우의 수를 세는 간단한 시뮬레이션 문제입니다.
- 총
100
개의 자리 중 일부가 사용될 수 있으며, 손님이 원하는 자리가 이미 사용 중이면 해당 손님은 받지 못합니다. - 각 손님이 원하는 자리 번호를 하나씩 제시할 때, 해당 자리가 비어 있으면 예약을 받고, 이미 차 있으면 거절합니다.
- 최종적으로 거절된 손님의 수를 출력하는 문제입니다.
접근법
100
개의 좌석에 대해 사용 여부를 저장하는 불리언 배열을 선언합니다.- 각 손님의 요청을 순회하면서 해당 자리가 비어 있는지 확인하며 :
- 해당 자리가 비어있지 않다면 거절 수를 증가시킵니다.
- 해당 자리가 비어있지 않다면 거절 수를 증가시킵니다.
- 배열 인덱스는
0
부터 시작하므로, 입력받은 자리 번호에서1
을 뺀 값을 인덱스로 사용합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
class Program {
static void Main() {
bool[] occupied = new bool[100];
int cnt = int.Parse(Console.ReadLine());
var inputs = Console.ReadLine().Split();
int rejected = 0;
for (int i = 0; i < cnt; i++) {
int seat = int.Parse(inputs[i]) - 1;
if (occupied[seat])
rejected++;
else
occupied[seat] = true;
}
Console.WriteLine(rejected);
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
bool sieve[100] = {false, };
int cntC; cin >> cntC;
int ans = 0;
for (int i = 0; i < cntC; i++) {
int s; cin >> s;
if (sieve[s - 1]) ans++;
else sieve[s - 1] = true;
}
cout << ans << "\n";
return 0;
}