[백준(JAVA)] 2930번: 가위 바위 보

세하·2025년 4월 22일

[백준] 문제풀이

목록 보기
42/94
post-thumbnail

문제

✔ 난이도 - 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;
        }
    }
}

TIL💡

📌 https://velog.io/@seha01130/Java-1차원-배열-2차원-배열-정리-코드

📌 https://velog.io/@seha01130/toCharArray-사용

0개의 댓글