1. 서론
가위바위보를 구현하는 시뮬레이션 문제이다. 가위바위보의 논리는 간단하지만 그걸 얼마나 잘 푸는지가 관건인 문제다. 난 내공이 부족해서 완전 코드가 엉망 ㅜ
2. 문제 풀이
두 사람이 양손으로 가위바위보를 한다. 그리고 3초 후에 왼손, 오른손 중 선택해서 가위바위보의 승패를 결정한다. 서로 낸 것을 보고 뭘 낼 것인지 결정하는데 그 승부를 예상할 수 없을 때는 '?'를 무조건 한 사람이 이기는 경우에는 이긴 사람의 이름을 출력하는 문제이다.
처음에 되게 난감했다. 코드를 논리적으로 짜야하는데 뭔가 방법이 생각나지 않아서 정말 모든 경우의 수를 처리해주는 코드를 짰다.
두 사람이 가위바위보를 했을 경우, 한 사람이 명확하게 다 이기는 경우라면 왼손, 오른손의 어떠한 경우에도 다 이기거나, 양손에 같은 것을 내서 상대방이 판단으로 이기는 것을 내는 경우. 그 외에 양쪽이 한 번이라도 이기는 경우가 있다면 승부는 어찌 될지 모르기에 '?'를 출력한다.
3. 코드 설명
#include <iostream>
using namespace std;
int calc(char a, char b)
{//0, 1, 2 이김, 짐, 비김
if (a == 'R')
{
if(b == 'S') return 0;
else if (b == 'R') return 2;
else return 1;
}
if (a == 'S')
{
if(b == 'P') return 0;
else if (b == 'S') return 2;
else return 1;
}
if (a == 'P')
{
if(b == 'R') return 0;
else if (b == 'P') return 2;
else return 1;
}
}
int main()
{
char mr, ml, tr, tl;
int m = 0, t = 0;
cin >> mr >> ml >> tr >> tl;
if (calc(mr, tr) == 0) m++;
if (calc(mr, tr) == 1) t++;
if (calc(mr, tl) == 0) m++;
if (calc(mr, tl) == 1) t++;
if (calc(ml, tr) == 0) m++;
if (calc(ml, tr) == 1) t++;
if (calc(ml, tl) == 0) m++;
if (calc(ml, tl) == 1) t++;
if (mr != ml && tr != tl)
{
if (m > 0 && t > 0)
cout << "?" << endl;
if (m == 4)
cout << "MS" << endl;
if (t == 4)
cout << "TK" << endl;
}
else
{
if (mr == ml && t > 0)
cout << "TK" << endl;
else if (tr == tl && m > 0)
cout << "MS" << endl;
else
cout << "?" << endl;
}
}
코드가 엄청 더럽다 ㅜ
calc 함수에서는 가위바위보의 승패를 정해준다. a를 기준으로 이기면 0 지면 1 비기면 2를 return 한다.
그리고 민성이가 이기는 경우와 태경이가 이기는 경우를 count 한 후 둘 다 이기는 경우가 있을 때?
그리고 (왼, 오) * (왼, 오)의 경우의 수로 4개의 경우의 수가 모두 이긴다고 하는 경우 이긴 사람의 이름
그리고 그 외에 한 사람이 주먹 가위 보 중 다 같은 것을 내고 다른 사람이 이긴 경우가 있다면 무조건 한 사람이 이기게 되는 경우이므로 그 사람이 이기는 것으로 하고 나머지 경우는 모두 '?' 처리한다.
'Algorithm' 카테고리의 다른 글
[C++] 백준 13458 시험 감독 (0) | 2021.04.21 |
---|---|
[C++] 백준 9037 The candy war (0) | 2021.04.21 |
[C++] 백준 17224 APC는 왜 서브태스크 대회가 되었을까? (0) | 2021.04.17 |
[C++] 백준 16165 걸그룹 마스터 준석이 (0) | 2021.04.17 |
[C++] 백준 17389 보너스 점수 (0) | 2021.04.17 |