코틀린 코딩테스트 강좌, 칵테일 만들기

오늘은 코틀린을 사용하여 간단한 알고리즘 문제를 해결하는 방법을 살펴보겠습니다.
주제는 “칵테일 만들기”입니다. 이 문제는 다양한 재료를 조합하여 원하는 칵테일을 만드는 과정을
통해 효율적인 알고리즘 설계와 구현을 배울 수 있도록 돕습니다.
문제의 기본 개념을 이해한 후, 코드를 작성하고, 테스트를 진행하는 과정에서
실제 코딩테스트에서 중요한 여러 요소를 익힐 수 있습니다.

문제 설명

지금 우리는 칵테일 바의 바텐더입니다. 고객은 자신이 원하는 색깔을 요구하였고, 우리는
여러 재료를 사용하여 그 색깔에 맞는 칵테일을 만들어야 합니다.

다음과 같은 입력이 주어집니다:

  • 재료의 개수 N (1 <= N <= 100)
  • 각 재료의 색깔이 기록된 배열 colors (각각의 색깔은 문자열로 주어짐)
  • 고객이 요청한 색깔 targetColor (문자열)

우리는 고객이 요청한 색깔의 칵테일을 만들 수 있는지를 판단해야 합니다.
만약 만들 수 있다면 “가능”, 그렇지 않다면 “불가능”을 출력해야 합니다.

입력 예시

        5
        "red", "blue", "green", "yellow", "red"
        "purple"
    

출력 예시

가능

알고리즘 설계

이 문제를 해결하기 위해서는 몇 가지 단순한 연산을 수행해야 합니다.
먼저, 주어진 색깔들을 모두 확인하여 고객의 요청과 매칭되는 색깔이 있는지를 검사해야 합니다.
다음과 같이 접근할 수 있습니다:

  1. 주어진 색깔 배열에서 고객의 요청과 일치하는 색깔이 있는지 탐색합니다.
  2. 일치하는 색깔이 발견되면 “가능”을 출력하고, 반복을 종료합니다.
  3. 모든 색깔을 검사한 후에도 일치하는 색깔이 없으면 “불가능”을 출력합니다.

코드 작성

이제 위에서 설계한 알고리즘을 바탕으로 코틀린 코드를 작성해 보겠습니다.
코틀린 특유의 간결한 문법을 활용하여 문제를 해결하는 코드를 아래와 같이 구현할 수 있습니다.

        fun canMakeCocktail(colors: Array, targetColor: String): String {
            for (color in colors) {
                if (color == targetColor) {
                    return "가능"
                }
            }
            return "불가능"
        }

        fun main() {
            val colors = arrayOf("red", "blue", "green", "yellow", "red")
            val targetColor = "purple"
            println(canMakeCocktail(colors, targetColor))
        }
    

코드 설명

위 코드에서 canMakeCocktail 함수는 두 개의 매개 변수를 받습니다.
첫 번째 매개 변수는 색깔의 배열이며, 두 번째 매개 변수는 고객이 원하는 색깔입니다.
for 루프를 사용하여 배열을 순회하면서, 요청한 색깔과 일치하는 색깔이 있는지 검사합니다.

만약 일치하는 색깔이 발견된 경우, “가능”을 반환하고 종료합니다.
모든 색깔을 검사한 후 일치하는 경우가 없다면 “불가능”을 반환합니다.
main 함수에서는 주어진 색깔 배열과 고객의 요청 색깔을 설정하고,
canMakeCocktail 함수를 호출하여 결과를 출력합니다.

테스트 케이스

이제 코드를 테스트 해 보겠습니다. 여러 가지 입력 사례를 통해 우리 코드가
정확하게 기능하는지 확인해 보겠습니다.

1. 일반적인 경우

        입력: ["red", "blue", "green", "yellow", "red"], "green"
        출력: 가능
    

2. 요청한 색깔이 없는 경우

        입력: ["red", "blue", "green", "yellow", "red"], "orange"
        출력: 불가능
    

3. 중복된 색깔이 있는 경우

        입력: ["red", "blue", "blue", "yellow", "red"], "blue"
        출력: 가능
    

4. 모든 색깔이 같은 경우

        입력: ["red", "red", "red", "red", "red"], "red"
        출력: 가능
    

5. 색깔 배열이 비어 있는 경우

        입력: [], "red"
        출력: 불가능
    

결과 분석

모든 테스트 케이스에서 예상한 대로 결과가 출력되었습니다.
이를 통해 작성한 코드가 요구 사항을 충족하며,
다양한 경우의 수를 고려한 알고리즘으로 동작함을 확인할 수 있었습니다.

정리

이번 강좌에서는 코틀린을 사용하여 간단한 알고리즘 문제를 해결하는 방법을 배우았습니다.
칵테일 만들기 문제를 통해 배열 탐색, 조건문 사용, 함수 정의 등을 익힐 수 있었습니다.
알고리즘 문제를 해결할 때는 문제의 요구사항을 명확히 이해하고,
그에 맞는 데이터 구조와 알고리즘을 잘 선택하는 것이 중요합니다.

여러분도 다양한 문제를 통해 알고리즘 능력을 키워 나가시길 바랍니다.
다음 시간에는 더 복잡한 문제를 가지고 돌아오도록 하겠습니다.
감사합니다!