[백준 26676] Wybór zadań (C#, C++) - soo:bak
작성일 :
문제 링크
설명
라운드별로 필요한 문제 수가 정해져 있을 때, 주어진 아이디어들로 모든 위치를 채울 수 있는지 판별하는 문제입니다. 라운드 1~4는 각 디비전당 1문제, 라운드 5는 각 디비전당 2문제가 필요합니다.
접근법
각 아이디어의 라운드와 디비전을 파싱해서 5×3 배열에 개수를 셉니다. 라운드 5는 2문제, 나머지 라운드는 1문제가 필요하므로 모든 위치에서 필요한 수량 이상인지 확인합니다.
하나라도 부족하면 NIE, 모두 충족하면 TAK을 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var cnt = new int[5, 3];
var parts = Console.ReadLine()!.Split();
for (var i = 0; i < n; i++) {
var s = parts[i];
var r = s[0] - '1';
var d = s[1] - 'A';
cnt[r, d]++;
}
var ok = true;
for (var r = 0; r < 5; r++) {
for (var d = 0; d < 3; d++) {
var need = (r == 4) ? 2 : 1;
if (cnt[r, d] < need) { ok = false; break; }
}
if (!ok) break;
}
Console.WriteLine(ok ? "TAK" : "NIE");
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
int cnt[5][3] = {};
for (int i = 0; i < n; i++) {
string s; cin >> s;
int r = s[0] - '1';
int d = s[1] - 'A';
cnt[r][d]++;
}
bool ok = true;
for (int r = 0; r < 5 && ok; r++) {
for (int d = 0; d < 3; d++) {
int need = (r == 4) ? 2 : 1;
if (cnt[r][d] < need) { ok = false; break; }
}
}
cout << (ok ? "TAK" : "NIE") << "\n";
return 0;
}