개발자는 기록이 답이다

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Array_가위바위보) 본문

알고리즘/인프런 - Java알고리즘 입문

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Array_가위바위보)

slow-walker 2023. 9. 4. 10:49

 

https://cote.inflearn.com/contest/10/problem/02-03

 

OnlineJudge

 

cote.inflearn.com

(위의 링크는 인프런 로그인 후, 해당 강의를 사지 않으면 접속이 되지 않습니다)

 

 

3. 가위 바위 보

예시 입력 1 

5
2 3 3 1 3
1 1 2 2 3

예시 출력 1

A
B
A
B
D

 

내가 푼 풀이(Time: 172ms Memory: 27MB)

a와 b의 값이 가위, 바위, 보 중 어떤 숫자 인지 에 따라 분기처리해서 풀었다.

import java.util.Scanner;

public class Main {
    public String solution(int num, int[] a, int[] b) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < num; i++) {
            if (a[i] == 1 && b[i] == 2)
                sb.append("B");
            else if (a[i] == 1 && b[i] == 3)
                sb.append("A");
            else if (a[i] == 2 && b[i] == 1)
                sb.append("A");
            else if (a[i] == 2 && b[i] == 3)
                sb.append("B");
            else if (a[i] == 3 && b[i] == 1)
                sb.append("B");
            else if (a[i] == 3 && b[i] == 2)
                sb.append("A");
            else
                sb.append("D");
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] a = new int[num];
        for (int i = 0; i < num; i++) {
            a[i] = sc.nextInt();
        }
        int[] b = new int[num];
        for (int i = 0; i < num; i++) {
            b[i] = sc.nextInt();
        }
        String solution = T.solution(num, a, b);
        for (int i = 0; i < solution.length() ; i++) {
            System.out.println(solution.charAt(i));
        }
    }
}

 

 

강의 풀이(Time: 184ms Memory: 27MB)

조건을 A가 비기는 경우, 이기는 경우로만 해서 분기처리가 훨씬 간단해졌다.

출력할때 toCharArry()로 순회하면서 출력했다.

import java.util.Scanner;

public class Answer {

    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";
            // A가 이기는 경우들
            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";
            // 나머지는 B가 이기는 경우
            else answer += "B";
        }
        return answer;
    }

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