자바 코딩테스트 강좌, 카드 게임

이 강좌는 자바 프로그래밍 언어를 이용한 코딩 테스트 준비를 위한 것입니다. 오늘의 주제는 ‘카드 게임’입니다. 카드 게임은 알고리즘 문제 풀이에 매우 유용한 주제 중 하나로, 다양한 자료구조와 알고리즘을 학생들에게 이해시키는 데 도움이 됩니다.

문제 설명

주어진 카드 뭉치에서 각 카드에 적힌 숫자들 중, 상대방의 카드 중 가장 높은 숫자를 찾는 게임을 진행합니다. 각 플레이어는 카드 뭉치에서 랜덤하게 선택된 카드를 가지고 있으며, 그 카드의 숫자를 통해 점수를 주고받습니다.

문제

두 플레이어 A와 B가 카드를 가지고 있습니다. A의 카드와 B의 카드가 주어질 때, 아래와 같은 규칙에 따라 A와 B의 승패를 판별하는 기능을 작성하세요.

  • 카드의 수는 N이며, A와 B 각각 같은 수의 카드를 가집니다.
  • 각 카드의 숫자는 1부터 100까지의 정수입니다.
  • 각 라운드에서 두 플레이어는 카드를 하나씩 내놓고, 숫자가 더 큰 플레이어가 그 라운드의 승자가 됩니다.
  • 모든 라운드가 끝난 후, 총 라운드에서 더 많은 승리를 거둔 플레이어가 최종 승자가 됩니다.

입력

첫 번째 줄에는 N (1 ≤ N ≤ 100) 이 주어집니다. 두 번째 줄에는 플레이어 A의 카드 숫자가 주어집니다. 세 번째 줄에는 플레이어 B의 카드 숫자가 주어집니다.

출력

각 플레이어의 승리 횟수를 출력하고, 최종 승자가 누구인지 출력하세요. 만약 두 플레이어의 승리 횟수가 같다면 ‘Draw’를 출력합니다.

예시 입력

    5
    3 6 7 1 2
    4 5 8 1 3
    

예시 출력

    A: 2, B: 3
    B
    

해결 과정

이 문제를 해결하기 위해서는 다음과 같은 알고리즘 단계가 필요합니다.

  1. 입력을 받아온다.
  2. A와 B의 카드 숫자를 비교하여 각 라운드의 승자를 결정한다.
  3. 각 플레이어의 승리 횟수를 세고, 최종 승자를 판별한다.

입력받기

자바에서 Scanner 클래스를 사용하여 입력을 받을 수 있습니다. 먼저 N의 값을 읽고, A와 B의 카드를 배열로 저장합니다.

    import java.util.Scanner;

    public class CardGame {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);

            int N = scanner.nextInt();
            int[] A = new int[N];
            int[] B = new int[N];

            for (int i = 0; i < N; i++) {
                A[i] = scanner.nextInt();
            }

            for (int i = 0; i < N; i++) {
                B[i] = scanner.nextInt();
            }
        }
    }
    

승리 횟수 세기

각 라운드마다 카드를 비교하고, 승리 횟수를 증가시켜 나갑니다. 비교는 단순한 if-else 문으로 구현할 수 있습니다.

    int scoreA = 0, scoreB = 0;

    for (int i = 0; i < N; i++) {
        if (A[i] > B[i]) {
            scoreA++;
        } else if (A[i] < B[i]) {
            scoreB++;
        }
    }
    

최종 승자 결정

모든 라운드가 끝난 후 승리 횟수를 비교하여 결과를 출력합니다.

    System.out.println("A: " + scoreA + ", B: " + scoreB);
    
    if (scoreA > scoreB) {
        System.out.println("A");
    } else if (scoreA < scoreB) {
        System.out.println("B");
    } else {
        System.out.println("Draw");
    }
    

전체 코드

    import java.util.Scanner;

    public class CardGame {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);

            int N = scanner.nextInt();
            int[] A = new int[N];
            int[] B = new int[N];

            for (int i = 0; i < N; i++) {
                A[i] = scanner.nextInt();
            }

            for (int i = 0; i < N; i++) {
                B[i] = scanner.nextInt();
            }

            int scoreA = 0, scoreB = 0;

            for (int i = 0; i < N; i++) {
                if (A[i] > B[i]) {
                    scoreA++;
                } else if (A[i] < B[i]) {
                    scoreB++;
                }
            }

            System.out.println("A: " + scoreA + ", B: " + scoreB);

            if (scoreA > scoreB) {
                System.out.println("A");
            } else if (scoreA < scoreB) {
                System.out.println("B");
            } else {
                System.out.println("Draw");
            }
        }
    }
    

결론

이번 강좌에서는 카드 게임을 주제로 한 알고리즘 문제를 풀어보았습니다. 알고리즘 문제는 기본적인 자료구조 및 알고리즘 이해를 돕는 데 큰 도움이 됩니다. 효율적인 문제 해결 능력을 기르기 위해 지속적으로 연습하는 것이 중요합니다. 코딩 테스트에 대한 준비가 잘 되길 바랍니다!

참고 자료

이 강좌는 다음의 자료를 기반으로 작성되었습니다:

  • Java 공식 문서
  • 알고리즘 문제 해결 전략
  • 프로그래밍 대회 기출문제