🔗 백준 2930 - 가위 바위 보
문제

알고리즘 분류
풀이
- IDEA
(1) 실제 상근이가 낸 모양으로 점수 계산
(2) 상근이가 낼 수 있는 경우의 수로 최대 점수 계산 (브루트포스)
1. 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
R = Integer.parseInt(br.readLine());
StringTokenizer st;
st = new StringTokenizer(br.readLine());
char[] sanggeun = st.nextToken().toCharArray();
N = Integer.parseInt(br.readLine());
char[][] friends = new char[N][R];
for(int i = 0; i < N; i++){
st = new StringTokenizer(br.readLine());
friends[i] = st.nextToken().toCharArray();
}
2. 점수 계산 함수 구현
public static int getScore(char sanggeun, char friend){
if(sanggeun == friend)
return 1;
switch (sanggeun){
case 'R':
return friend == 'S' ? 2 : 0;
case 'S':
return friend == 'P' ? 2 : 0;
case 'P':
return friend == 'R' ? 2 : 0;
default: return 0;
}
}
3. 상근이의 점수 계산하기
int score = 0;
for(int j = 0; j<R; j++){
for(int i = 0; i<N; i++){
score += getScore(sanggeun[j], friends[i][j]);
}
}
4. 최대 점수 계산하기
int bestScore = 0;
for(int j = 0; j<R; j++){
int rScore = 0;
int sScore = 0;
int pScore = 0;
for(int i = 0; i<N; i++){
rScore += getScore('R', friends[i][j]);
sScore += getScore('S', friends[i][j]);
pScore += getScore('P', friends[i][j]);
}
bestScore+= Math.max(rScore, Math.max(sScore, pScore));
}
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N; static int R;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
R = Integer.parseInt(br.readLine());
StringTokenizer st;
st = new StringTokenizer(br.readLine());
char[] sanggeun = st.nextToken().toCharArray();
N = Integer.parseInt(br.readLine());
char[][] friends = new char[N][R];
for(int i = 0; i < N; i++){
st = new StringTokenizer(br.readLine());
friends[i] = st.nextToken().toCharArray();
}
int score = 0;
for(int j = 0; j<R; j++){
for(int i = 0; i<N; i++){
score += getScore(sanggeun[j], friends[i][j]);
}
}
int bestScore = 0;
for(int j = 0; j<R; j++){
int rScore = 0;
int sScore = 0;
int pScore = 0;
for(int i = 0; i<N; i++){
rScore += getScore('R', friends[i][j]);
sScore += getScore('S', friends[i][j]);
pScore += getScore('P', friends[i][j]);
}
bestScore+= Math.max(rScore, Math.max(sScore, pScore));
}
System.out.println(score);
System.out.println(bestScore);
}
public static int getScore(char sanggeun, char friend){
if(sanggeun == friend)
return 1;
switch (sanggeun){
case 'R':
return friend == 'S' ? 2 : 0;
case 'S':
return friend == 'P' ? 2 : 0;
case 'P':
return friend == 'R' ? 2 : 0;
default: return 0;
}
}
}