순간을 기록으로

[Java] 가위바위보 | 인프런 | 배열 본문

Problem Solving

[Java] 가위바위보 | 인프런 | 배열

luminous13 2022. 4. 19. 16:05

문제

 

풀이

가위바위보를 할 경우 상황은 크게 3가지로 나눌 수 있습니다. 1.A가 이긴 경우 2.B가 이긴 경우 3. 무승부인 경우 

A가 낼 수 있는 경우의 수는 3가지이고 B도 마찬가지 이므로 총 9가지 경우의 수가 나올 수 있습니다. 그리고 이 9가지 경우의 수를 3으로 나누면 각각의 상황마다 경우의 수는 3가지입니다.

 

가위, 바위, 보를 숫자 1,2,3으로 매핑하여 문제를 풀지만 가독성을 올리기 위해 대문자로 지어진 상수를 만들었습니다.

 

소스코드

import java.io.IOException;
import java.util.Scanner;

/*
* - n 횟수만큼 반복합니다.
* - 만약 A가 이긴다면 'A'를 배열에 담습니다.
*   - A(가위,1)이고 B(보,3) 일 때
*   - A(바위,2)이고 B(가위,1)일 때
*   - A(보,3)이고 B(바위,2)일 때
* - 만약 B가 이긴다면 'B'를 배열에 담습니다.
*   - B(가위,1)이고 A(보,3) 일 때
*   - B(바위,2)이고 A(가위,1)일 때
*   - B(보,3)이고 A(바위,2)일 때
* - 만약 A,B가 비긴다면 'D'를 배열에 담습니다.
*   - 이외의 모든 경우의 수
* */
public class Main {
    public final static int SCISSORS = 1;   // 가위
    public final static int ROCK = 2;       // 바위
    public final static int PAPER = 3;      // 보

    public static char[] solution(int n, int[] A, int[] B) {
        char[] results = new char[n];

        for (int i=0; i<n; i++) {
            // A가 이긴 경우
            if ( A[i] == SCISSORS && B[i] == PAPER || A[i] == ROCK && B[i] == SCISSORS || A[i] == PAPER && B[i] == ROCK )
                results[i] = 'A';
            // B가 이긴 경우
            else if (B[i] == SCISSORS && A[i] == PAPER || B[i] == ROCK && A[i] == SCISSORS || B[i] == PAPER && A[i] == ROCK)
                results[i] = 'B';
            // 무승부인 경우
            else
                results[i] = 'D';
        }

        return results;
    }

    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] A = new int[n];
        int[] B = new int[n];

        for (int i=0; i<n; i++) {
            A[i] = in.nextInt();
        }
        for (int i=0; i<n; i++) {
            B[i] = in.nextInt();
        }

        for (char ch : solution(n,A,B)) {
            System.out.println(ch);
        }
    }
}
Comments