[Java][백준] #2930 - 가위 바위 보

배수연·2024년 2월 26일

algorithm

목록 보기
8/45

🔗 백준 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;
        }
    }
}


0개의 댓글