컴굥일지

[BOJ/백준 2930][C++] 가위 바위 보 본문

알고리즘/코테 문제

[BOJ/백준 2930][C++] 가위 바위 보

gyong 2022. 4. 15. 03:45
반응형

문제

https://www.acmicpc.net/problem/2930

백준 2930

백준 2930

 

문제 내용

상근이가 가위바위보를 한다.

친구들과의 가위바위보를 했을 때의 점수를 출력하고, 친구들의 수를 미리 알고 있었을 때 상근이가 가장 많이 획득할 수 있는 점수도 출력하면 된다. 

 

문제 풀이

check_win()이라는 함수를 만들어 문제를 해결했다.

상근이의 수와 친구의 수를 인자로 넘겨서 상근이가 몇 점을 획득할지 반환하는 함수이다.

이 함수를 main함수의 반복문 안에서 사용하면 된다.

 

arr배열은 상근이가 친구들의 수를 모두 알고 있을 때, 가위/보/바위를 냈을 때 어떤 점수를 받는지를 저장한 것이다.

이중에 가장 큰 값을 저장하면 max_score를 얻을 수 있다.

 

그냥 score는 상근이와 친구들의 수를 그냥 비교하면 상근이가 몇 점을 획득했는지를 저장하면 된다.

 

코드

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

//비교 함수
int check_win(char base, char fr) { 
	if (base == 'S') {//가위
		if (fr == 'S') return 1; //비김
		if (fr == 'P') return 2;
		if (fr == 'R') return 0;
	}
	if (base == 'P') {//보
		if (fr == 'S') return 0;
		if (fr == 'P') return 1;//비김
		if (fr == 'R') return 2;
	}
	if (base == 'R') {//바위
		if (fr == 'S') return 2;
		if (fr == 'P') return 0;
		if (fr == 'R') return 1;//비김
	}
}


int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	//입력
	int r,n;
	cin >> r;
	vector<char>sk(r); //라운드
	for (int i = 0; i < r; i++) cin >> sk[i];
	cin >> n;
	vector<vector<char>>friends(n,vector<char>(r)); //친구
	for (int i = 0; i < n; i++)//친구
		for (int j = 0; j < r; j++)//라운드
			cin >> friends[i][j];


	//문제 해결
	int score = 0, max_score = 0;
	for (int j = 0; j < r; j++) {
		int arr[3] = { 0,0,0 };
		for (int i = 0; i < n; i++) {
			arr[0] += check_win('S', friends[i][j]);
			arr[1] += check_win('P', friends[i][j]);
			arr[2] += check_win('R', friends[i][j]);

			score += check_win(sk[j], friends[i][j]);
		}
		max_score += max(arr[0], max(arr[1], arr[2]));
	}

	//결과 출력
	cout << score << '\n' << max_score << '\n';;
		
}

반응형
Comments