카테고리 없음
[백준/c++] 2930번: 가위 바위 보
녕이
2022. 7. 9. 14:10
728x90
https://www.acmicpc.net/problem/2930
2930번: 가위 바위 보
가위 바위 보는 두 사람이 즐기는 유명한 게임이다. 각 플레이어는 자신의 손을 이용해서 가위, 바위, 보 중 한 모양을 만들어야 한다. 두 플레이어가 같은 모양을 만든 경우에는 비기게 된다. 가
www.acmicpc.net
가위바위보 점수 구하기
상근이가 친구들이 무엇을 낼지 미리 알고 있었다면, 얻을 수 있는 최고 점수 구하기
평범하게 가위바위보를 했을 경우, 매 라운드를 돌면서 score에 상근이가 낸 값과 친구가 낸 값을 check 함수를 통해 나온 점수를 누적
무엇을 낼지 미리 알고 있었을 경우, 매 라운드를 돌면서 친구와 'S', 'R', 'P'를 냈을 때 나오는 점수 값을 win 배열에 넣는다. 그리고, 매 라운드가 끝나면 (내부 for문이 끝나면) max_s에 가장 큰 값을 넣어준다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
//비교 함수
int check(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;
}
return 0;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int r,n;
cin >> r;
vector<char>sg(r);
for (int i = 0; i < r; i++) cin >> sg[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 win[3] = { 0,0,0 };
for (int i = 0; i < n; i++) {
win[0] += check('S', friends[i][j]);
win[1] += check('P', friends[i][j]);
win[2] += check('R', friends[i][j]);
score += check(sg[j], friends[i][j]);
}
max_score += max(win[0], max(win[1], win[2]));
}
cout << score << '\n' << max_score << '\n';;
}
생각보다 어려웠는데 풀고 나니까 쉬웠던 문제.. 역시 생각해내는 게 젤 어려워~~~~ㅠㅠ
728x90