코틀린 코딩테스트 강좌, 카드 게임

본 글에서는 코틀린을 이용한 알고리즘 문제 풀이 강좌를 통해 ‘카드 게임’ 관련 문제를 다룰 것입니다.
알고리즘 문제를 해결하는 과정에서 필요한 이론, 코드 예시 및 다양한 접근 방식에 대해 자세히 설명하겠습니다.

문제 설명

카드 게임은 두 명의 플레이어가 각각 5장의 카드를 가지고 시작하는 게임입니다.
각 플레이어는 카드의 숫자에 따라서 점수를 계산합니다.
두 플레이어의 점수를 비교하여 승자를 결정하는 게임을 설명하겠습니다.

문제 정의

두 플레이어 A와 B가 있습니다. 플레이어 A와 B 각각은 5장의 카드를 가집니다.
카드의 점수는 카드의 숫자입니다. 두 플레이어의 총 점수를 비교하여 어떤 플레이어가 승자인지를 판단하는 프로그램을 작성해야 합니다.

입력

  • 첫 번째 줄에는 플레이어 A의 카드 5장이 공백으로 구분되어 주어진다.
  • 두 번째 줄에는 플레이어 B의 카드 5장이 공백으로 구분되어 주어진다.

출력

  • 총 점수를 합산하여 더 많은 점수를 가진 플레이어의 이름을 출력한다.
  • 점수가 동일한 경우 “Draw”를 출력한다.

예제

    입력:
    3 5 2 1 4
    6 5 4 3 2

    출력:
    B
    

문제 접근 방식

문제를 해결하기 위해 다음과 같은 단계를 거칩니다:

  1. 플레이어 A와 B의 카드를 리스트로 입력받습니다.
  2. 각 플레이어의 점수를 계산합니다.
  3. 점수를 비교하여 승자를 결정합니다.

코드 작성

아래는 코틀린으로 작성한 코드입니다.

fun main() {
        // 입력을 받는다.
        val aCards = readLine()!!.split(" ").map { it.toInt() }
        val bCards = readLine()!!.split(" ").map { it.toInt() }

        // 점수를 계산한다.
        val aScore = aCards.sum()
        val bScore = bCards.sum()

        // 승자를 결정한다.
        when {
            aScore > bScore -> println("A")
            aScore < bScore -> println("B")
            else -> println("Draw")
        }
    }

코드 분석

위 코드는 다음과 같은 기능을 수행합니다:

  • readLine()을 통해 사용자로부터 입력 받은 두 줄을 읽고, 공백을 기준으로 나누어 각 카드의 숫자를 정수 리스트로 변환합니다.
  • sum() 메서드를 사용하여 각 플레이어의 점수를 계산합니다.
  • when 문을 사용하여 점수를 비교하고, 더 높은 점수를 가진 플레이어의 이름을 출력합니다.

테스트 및 검증

여러 상황에서 코드를 테스트하여 입력에 따라 올바른 출력이 나오는지 검증해야 합니다.
예를 들어, 플레이어 A의 카드가 모두 0일 때와 같은 edge case를 포함하여 다양한 테스트 케이스를 고려해야 합니다.

마무리

이번 강좌에서는 코틀린을 사용하여 간단한 카드 게임 문제를 해결하는 과정을 살펴보았습니다.
알고리즘 문제를 풀기 위해서는 문제를 이해하고, 알고리즘을 설계한 후, 이를 코드로 구현해 나가는 순서가 중요한데
이는 다양한 접근 방식을 통해 연습하며 발전할 수 있습니다.
지속적으로 연습하고 다양한 문제를 풀어보며 코딩 능력을 키워보세요.

추가 연습 문제

아래의 문제를 추가로 풀어보세요:

  • 두 플레이어가 각자 7장의 카드를 가질 경우 점수 체계가 어떻게 변하는지 계산하는 프로그램을 작성하시오.
  • 각 플레이어가 카드 배팅을 통해 최종 점수에 영향을 미치는 간단한 규칙을 추가하는 프로그램을 작성해 보세요.

지속적인 연습이 중요합니다. 성공적인 코딩 테스트 준비를 기원합니다!