[백준 16675] 두 개의 손 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
각자 두 손의 수가 주어질 때, 한 손을 선택해 무조건 이길 수 있는 사람이 있는지 판단하는 문제입니다.
접근법
가위바위보에서 어떤 손이 상대의 두 손 모두를 이기면 그 사람은 반드시 이깁니다.
민성이의 왼손 또는 오른손이 태경이의 두 손 모두를 이기는지, 반대로 태경이가 같은 조건을 만족하는지 확인합니다.
둘 다 아니면 결과를 확정할 수 없으므로 ?를 출력합니다.
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
using System;
class Program {
static bool Beats(char a, char b) {
return (a == 'R' && b == 'S') ||
(a == 'S' && b == 'P') ||
(a == 'P' && b == 'R');
}
static void Main() {
var parts = Console.ReadLine()!.Split();
var ml = parts[0][0];
var mr = parts[1][0];
var tl = parts[2][0];
var tr = parts[3][0];
var msWin = (Beats(ml, tl) && Beats(ml, tr)) ||
(Beats(mr, tl) && Beats(mr, tr));
var tkWin = (Beats(tl, ml) && Beats(tl, mr)) ||
(Beats(tr, ml) && Beats(tr, mr));
if (msWin) Console.WriteLine("MS");
else if (tkWin) Console.WriteLine("TK");
else Console.WriteLine("?");
}
}
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
#include <bits/stdc++.h>
using namespace std;
bool beats(char a, char b) {
return (a == 'R' && b == 'S') ||
(a == 'S' && b == 'P') ||
(a == 'P' && b == 'R');
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
char ml, mr, tl, tr;
cin >> ml >> mr >> tl >> tr;
bool msWin = (beats(ml, tl) && beats(ml, tr)) ||
(beats(mr, tl) && beats(mr, tr));
bool tkWin = (beats(tl, ml) && beats(tl, mr)) ||
(beats(tr, ml) && beats(tr, mr));
if (msWin) cout << "MS\n";
else if (tkWin) cout << "TK\n";
else cout << "?\n";
return 0;
}