
✔ 난이도 - Bronze 1


❌ 처음에 최고점수 구하는걸 중첩for문 3개를 사용했더니 런타임에러가 떴었다. 라운드별로(첫번째for문) 상근이가 s,p,r을 낼 때 각각을 기준으로(두번째for문) 친구들이 낸 가위바위보와 비교하며 계산(세번째for문)
⭕ 두번째 for문을 없애고 세번째 for문 내부에서 그냥 각각 s,p,r일때의 최대값을 구해주고 그 중 가장 큰 값을 최고점수로 가져오는 방식으로 하여 for문을 2개로 줄였다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int round = Integer.parseInt(br.readLine());
String sgstr = br.readLine();
char[] sg = sgstr.toCharArray();
// System.out.println(sg);
int friendCount = Integer.parseInt(br.readLine());
char[][] fd = new char[friendCount][round];
for (int i = 0; i < friendCount; i++) {
String str = br.readLine();
fd[i] = str.toCharArray();
}
// System.out.println(Arrays.deepToString(fd));
// 상근이 점수
int score = 0;
for (int i = 0; i < friendCount; i++) {
for (int j = 0; j < round; j++) {
score += getScore(sg[j], fd[i][j]);
}
}
sb.append(score);
// 상근이가 얻을 수 있는 최고점수
int maxScore = 0;
for (int i = 0; i < round; i++) {
int sScore = 0;
int pScore = 0;
int rScore = 0;
for (int j = 0; j < friendCount; j++) {
sScore += getScore('S', fd[j][i]);
pScore += getScore('P', fd[j][i]);
rScore += getScore('R', fd[j][i]);
}
maxScore += Math.max(sScore, Math.max(pScore, rScore));
}
sb.append("\n").append(maxScore);
System.out.println(sb);
}
// 가위바위보 점수 계산 함수
public static int getScore(char sg, char fd) {
if (sg == fd) {
return 1;
}
switch (sg) {
case 'S':
return fd == 'P' ? 2 : 0;
case 'P':
return fd == 'R' ? 2 : 0;
case 'R':
return fd == 'S' ? 2 : 0;
default:
return 0;
}
}
}
📌 https://velog.io/@seha01130/Java-1차원-배열-2차원-배열-정리-코드
📌 https://velog.io/@seha01130/toCharArray-사용

