😈 알고리즘/🍃 인프런 #1

🙏 20. 가위 바위 보

Buᐢ༝ᐢy 2023. 3. 10. 18:00

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비 - 인프런 | 강의

모든 문제에 대한 저작권은 위 강의에 있습니다.

문제

A, B 두 사람이 가위바위보 게임을 합니다. 총 N번의 게임을 하여 A가 이기면 A를 출력하고, B가 이기면 B를 출력합니다. 비길 경우에는 D를 출력합니다. 가위, 바위, 보의 정보는 1:가위, 2:바위, 3:보로 정하겠습니다. 예를 들어 N=5이면

회수 1 2 3 4 5
A의 정보 2 3 3 1 3
B의 정보 1 1 2 2 3
승자 A B A B D

두 사람의 각 회의 가위, 바위, 보 정보가 주어지면 각 회를 누가 이겼는지 출력하는 프로그램을 작성하세요.

입력 설명

첫 번째 줄에 게임 횟수인 자연수 N(1<=N<=100)이 주어집니다. 두 번째 줄에는 A가 낸 가위, 바위, 보 정보가 N개 주어집니다. 세 번째 줄에는 B가 낸 가위, 바위, 보 정보가 N개 주어집니다.

출력 설명

각 줄에 각 회의 승자를 출력합니다. 비겼을 경우는 D를 출력합니다.

입력 예제 1

5
2 3 3 1 3
1 1 2 2 3

출처 : 한국정보올림피아드

출력 예제 1

A
B
A
B
D

제출 코드

2023년 2월 7일

#include <iostream>
#include <vector>

using namespace std;

char RSP(int A, int B)
{
		if (A == 1)
		{
				if (B == 1)
						return 'D';
				else if (B == 2)
						return 'B';
				else
						return 'A';
		}
		else if (A == 2)
		{
				if (B == 1)
						return 'A';
				else if (B == 2)
						return 'D';
				else
						return 'B';
		}
		else
		{
				if (B == 1)
						return 'B';
				else if (B == 2)
						return 'A';
				else
						return 'D';
		}
}

int main()
{
		int N = 0;
		cin >> N;
	
		vector<int> A;
		vector<int> B;
	
		for (int i = 0; i < N; i++)
		{
				int temp = 0;
				cin >> temp;
				A.push_back(temp);
		}
	
		for (int i = 0; i < N; i++)
		{
				int temp = 0;
				cin >> temp;
				B.push_back(temp);
		}
	
		for (int i = 0; i < N; i++)
		{
				cout << RSP(A[i], B[i]) << '\\n';
		}
	
		return 0;
}

풀이

훨씬 간단하게 분기문으로 결과를 만드는 방법이 있었다.

<aside> 👉 1. 비기는 경우 (= 분기분 1번)

  1. A가 이기는 경우 (= 분기분 3번)
    • A 주먹 VS B 가위
    • A 가위 VS B 보
    • A 보 VS B 주먹
  2. else 그 외 : B가 이기는 경우 (= else)

</aside>

이렇게 하면 분기문이 총 5개로 끝난다.