본문 바로가기

Algorithm/Inflearn

[Inflearn] 자바 알고리즘 문제풀이 #02-03 3. 가위 바위 보

설명

A, B 두 사람이 가위바위보 게임을 합니다. 총 N번의 게임을 하여 A가 이기면 A를 출력하고, B가 이기면 B를 출력합니다. 비길 경우에는 D를 출력합니다.

가위, 바위, 보의 정보는 1:가위, 2:바위, 3:보로 정하겠습니다.

예를 들어 N=5이면

두 사람의 각 회의 가위, 바위, 보 정보가 주어지면 각 회를 누가 이겼는지 출력하는 프로그램을 작성하세요.

 

입력 

첫 번째 줄에 게임 횟수인 자연수 N(1<=N<=100)이 주어집니다.

두 번째 줄에는 A가 낸 가위, 바위, 보 정보가 N개 주어집니다.

세 번째 줄에는 B가 낸 가위, 바위, 보 정보가 N개 주어집니다.

 

출력 

각 줄에 각 회의 승자를 출력합니다. 비겼을 경우는 D를 출력합니다.

 

 

 

내 풀이
import java.util.ArrayList;
import java.util.Scanner;

public class Main2_3 {
    public ArrayList<Character> Solution(int n, int[] a, int[] b) {
        ArrayList<Character> answer = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            if(a[i] > b[i]) { // a가 이김
                if(a[i]==3 && b[i]==1) {
                    answer.add('B'); // a가 보, b가 가위인 경우
                    continue;
                }
                answer.add('A');
            }
            else if(a[i] < b[i]) { // b가 이김
                if(a[i]==1 && b[i]==3) {
                    answer.add('A'); // b가 보, a가 가위인 경우
                    continue;
                }
                answer.add('B');
            }
            else if(a[i] == b[i]) answer.add('D');
        }
        return answer;
    }

    public static void main(String[] args) {
        Main2_3 T = new Main2_3();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        int[] b = new int[n];
        for (int i = 0; i < n; i++) {
            b[i] = sc.nextInt();
        }
        for(char x : T.Solution(n, a, b)) {
            System.out.println(x);
        }
    }
}

 

 

 

선생님 풀이
import java.util.ArrayList;
import java.util.Scanner;

public class Main2_3 {
    public String Solution(int n, int[] a, int[] b) {
        String answer = "";
        for (int i = 0; i < n; i++) {
            if(a[i]==b[i]) answer+="D";
            else if (a[i]==1 && b[i]==3) answer+="A";
            else if (a[i]==2 && b[i]==1) answer+="A";
            else if (a[i]==3 && b[i]==2) answer+="A";
            else answer+="B";
        }
        return answer;
    }

    public static void main(String[] args) {
        Main2_3 T = new Main2_3();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
        }
        int[] b = new int[n];
        for (int i = 0; i < n; i++) {
            b[i] = sc.nextInt();
        }
        for(char x : T.Solution(n, a, b).toCharArray()) {
            System.out.println(x);
        }
    }
}

비기는 경우, A가 이기는 경우만 조건문을 이용해서 일일이 나열하고 나머지 경우는 모두 B가 이기는 걸로 하는 깔끔한 코드다.

나는 A가 이긴 경우와 B가 이긴 경우를 꼭 나눠서 코딩하는 버릇이 있는데 이렇게 간단히 구현할 수 있다니 오늘도 하나 더 알아간다.

 

 

 

결과