작성일 :

문제 링크

16675번 - 두 개의 손

설명

각자 두 손의 수가 주어질 때, 한 손을 선택해 무조건 이길 수 있는 사람이 있는지 판단하는 문제입니다.


접근법

가위바위보에서 어떤 손이 상대의 두 손 모두를 이기면 그 사람은 반드시 이깁니다.

민성이의 왼손 또는 오른손이 태경이의 두 손 모두를 이기는지, 반대로 태경이가 같은 조건을 만족하는지 확인합니다.

둘 다 아니면 결과를 확정할 수 없으므로 ?를 출력합니다.


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;
}