[백준 11507] 카드셋트 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
P
, K
, H
, T
네 가지 무늬의 카드들이 각각 **13
장씩으로 이루어진 완전한 카드 세트에서,**
입력 문자열로 주어진 카드들을 읽고 중복 여부를 검사한 뒤, 누락된 카드 수를 계산하는 문제입니다.
각 카드는 무늬(P
, K
, H
, T
)와 두 자리 숫자(01
~ 13
)로 구성되어 있으며,
카드가 중복되어 등장한 경우에는 "GRESKA"
를 출력하고, 그렇지 않은 경우에는 각 무늬별로 남은 카드 수를 출력합니다.
접근법
입력 문자열을 3글자씩 묶어
각 카드의 무늬와 숫자를 분리해냅니다.
- 카드의 무늬는 항상 첫 글자이며,
- 두 번째, 세 번째 글자를 숫자로 해석해 카드 번호를 얻습니다.
각 무늬에 대해 1 ~ 13번
카드가 사용되었는지를 기록하기 위해 배열을 활용합니다.
- 같은 카드가 두 번 등장하는 경우, 배열 값이
1
이상인지를 확인하여 중복을 판별합니다. - 중복이 확인되면
"GRESKA"
를 출력하고 종료합니다.
중복 없이 모든 카드를 정상적으로 읽은 경우에는,
각 무늬별로 아직 등장하지 않은 번호의 개수를 세어 출력합니다.
P
,K
,H
,T
각각에 대해13 - 등장한 카드 수
를 계산합니다.- 출력 순서는
P
,K
,H
,T
순으로 고정합니다.
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
28
29
30
31
32
33
34
35
using System;
class Program {
static void Main() {
string s = Console.ReadLine();
int[] p = new int[14], k = new int[14], h = new int[14], t = new int[14];
for (int i = 0; i < s.Length; i += 3) {
string suit = s.Substring(i, 1);
int num = int.Parse(s.Substring(i + 1, 2));
if (suit == "P") p[num]++;
else if (suit == "K") k[num]++;
else if (suit == "H") h[num]++;
else t[num]++;
}
for (int i = 1; i <= 13; i++) {
if (p[i] > 1 || k[i] > 1 || h[i] > 1 || t[i] > 1) {
Console.WriteLine("GRESKA");
return;
}
}
int countP = 0, countK = 0, countH = 0, countT = 0;
for (int i = 1; i <= 13; i++) {
if (p[i] == 0) countP++;
if (k[i] == 0) countK++;
if (h[i] == 0) countH++;
if (t[i] == 0) countT++;
}
Console.WriteLine($"{countP} {countK} {countH} {countT}");
}
}
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
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int p[14] = {}, k[14] = {}, h[14] = {}, t[14] = {};
string s; cin >> s;
for (size_t i = 0; i < s.size(); i += 3) {
int num = (s[i + 1] - '0') * 10 + (s[i + 2] - '0');
if (s[i] == 'P') p[num]++;
else if (s[i] == 'K') k[num]++;
else if (s[i] == 'H') h[num]++;
else t[num]++;
}
for (int i = 1; i < 14; ++i) {
if (p[i] > 1 || k[i] > 1 || h[i] > 1 || t[i] > 1) {
cout << "GRESKA\n";
return 0;
}
}
int ansP = 0, ansK = 0, ansH = 0, ansT = 0;
for (int i = 1; i < 14; ++i) {
ansP += !p[i];
ansK += !k[i];
ansH += !h[i];
ansT += !t[i];
}
cout << ansP << " " << ansK << " " << ansH << " " << ansT << "\n";
return 0;
}