컴굥일지
[BOJ/백준 2930][C++] 가위 바위 보 본문
반응형
문제
https://www.acmicpc.net/problem/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';;
}
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 2605][C++] 줄 세우기 (0) | 2022.04.17 |
---|---|
[BOJ/백준 4949][C++] 균형잡힌 세상 (0) | 2022.04.16 |
[BOJ/백준 1181][C++] 단어 정렬 (0) | 2022.04.10 |
[BOJ/백준 2164][C++] 카드2 (0) | 2022.04.09 |
[BOJ/백준 10828][C++] 스택 (0) | 2022.04.08 |
Comments