이 강좌는 자바 프로그래밍 언어를 이용한 코딩 테스트 준비를 위한 것입니다. 오늘의 주제는 ‘카드 게임’입니다. 카드 게임은 알고리즘 문제 풀이에 매우 유용한 주제 중 하나로, 다양한 자료구조와 알고리즘을 학생들에게 이해시키는 데 도움이 됩니다.
문제 설명
주어진 카드 뭉치에서 각 카드에 적힌 숫자들 중, 상대방의 카드 중 가장 높은 숫자를 찾는 게임을 진행합니다. 각 플레이어는 카드 뭉치에서 랜덤하게 선택된 카드를 가지고 있으며, 그 카드의 숫자를 통해 점수를 주고받습니다.
문제
두 플레이어 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
해결 과정
이 문제를 해결하기 위해서는 다음과 같은 알고리즘 단계가 필요합니다.
- 입력을 받아온다.
- A와 B의 카드 숫자를 비교하여 각 라운드의 승자를 결정한다.
- 각 플레이어의 승리 횟수를 세고, 최종 승자를 판별한다.
입력받기
자바에서 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 공식 문서
- 알고리즘 문제 해결 전략
- 프로그래밍 대회 기출문제