BOJ 25185 - 카드 뽑기 링크
(2024.03.06 기준 S4)
(1m, 2m, ..., 9m, 1p, 2p, ..., 9p, 1s, 2s, ..., 9s)으로 구성이 되어 있는 27장 카드 중 4장을 뽑았을 때
- 적힌 알파벳이 같으면서 숫자가 연속되는 세 장이 존재한다. 연속한 세 숫자는 서로 다른 숫자여야 한다.
- 적힌 알파벳과 숫자가 모두 같은 세 장이 존재한다.
- 두 장씩 짝지었을 때, 짝을 지은 카드끼리 적힌 숫자와 알파벳이 같다.
위 세 경우 중 하나에 포함되는지 판별
간단한 구현
첫 번째와 두 번째 경우는 세 카드, 세 번째 경우는 네 카드가 필요한데 이를 그냥 지문 그대로 구현해주면 된다.
각 언어에 내장되어 있는 순열(permutation)을 뽑아주는 함수, 연속한 세 숫자인지 판단할 때 정렬 함수. 이 두 함수를 사용한다면 훨씬 편하겠지만, 사용하지 않고 naive하게 구현을 꼭 시도해보자.
#include <bits/stdc++.h>
using namespace std;
bool check(string &a, string &b, string &c){
if (a[1] == b[1] && b[1] == c[1]){
char d = a[0], e = b[0], f = c[0];
if ((d + 2 == e + 1 && e + 1 == f) || (d + 2 == f + 1 && f + 1 == e) || (e + 2 == d + 1 && d + 1 == f) || (e + 2 == f + 1 && f + 1 == d) || (f + 2 == d + 1 && d + 1 == e) || (f + 2 == e + 1 && e + 1 == d)) return true;
}
return false;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int T; cin >> T;
string a, b, c, d;
for (; T; T--){
cin >> a >> b >> c >> d;
// 적힌 알파벳과 숫자가 모두 같은 세 장이 존재한다.
if ((a == b && b == c) || (a == b && b == d) || (a == c && c == d) || (b == c && c == d)) cout << ":)\n";
// 두 장씩 짝지었을 때, 짝을 지은 카드끼리 적힌 숫자와 알파벳이 같다.
else if ((a == b && c == d) || (a == c && b == d) || (a == d && b == c)) cout << ":)\n";
// 적힌 알파벳이 같으면서 숫자가 연속되는 세 장이 존재한다. 연속한 세 숫자는 서로 다른 숫자여야 한다.
else if (check(a, b, c) || check(a, b, d) || check(a, c, d) || check(b, c, d)) cout << ":)\n";
else cout << ":(\n";
}
}
import sys; input = sys.stdin.readline
def check(a, b, c):
if a[1] == b[1] == c[1]:
d = int(a[0]); e = int(b[0]); f = int(c[0])
if d + 2 == e + 1 == f or d + 2 == f + 1 == e or e + 2 == d + 1 == f or e + 2 == f + 1 == d or f + 2 == d + 1 == e or f + 2 == e + 1 == d:
return True
return False
for _ in range(int(input())):
a, b, c, d = input().split()
# 적힌 알파벳과 숫자가 모두 같은 세 장이 존재한다.
if a == b == c or a == b == d or a == c == d or b == c == d:
print(':)')
# 두 장씩 짝지었을 때, 짝을 지은 카드끼리 적힌 숫자와 알파벳이 같다.
elif (a == b and c == d) or (a == c and b == d) or (a == d and b == c):
# 틀린 이유 (a == d or b == d)
print(':)')
# 적힌 알파벳이 같으면서 숫자가 연속되는 세 장이 존재한다. 연속한 세 숫자는 서로 다른 숫자여야 한다.
elif check(a, b, c) or check(a, b, d) or check(a, c, d) or check(b, c, d):
print(':)')
else:
print(':(')