코틀린 코딩테스트 강좌, 불우이웃돕기

본 강좌에서는 코틀린 언어를 사용하여 취업용 알고리즘 문제를 해결하는 과정을 단계적으로 설명합니다. 이번 문제는 ‘불우이웃돕기’라는 주제로, 주어진 입력에 대해 올바른 출력을 도출하는 방식으로 진행됩니다.

문제 설명

한국의 한 자선단체에서는 매달 불우이웃에게 기부금을 전달하고 있습니다. 기부금 모금에 대한 데이터가 주어질 때,
기부금의 총합과 각 신청자의 기부금 평균을 계산하는 프로그램을 작성하세요.

입력 형식


T: 테스트 케이스의 수 (1 <= T <= 1000)
각 테스트 케이스는 다음을 포함합니다:
N: 기부자의 수 (1 <= N <= 100)
다음 줄에 N개의 정수로 각 기부자의 기부금이 주어집니다 (0 <= 기부금 <= 1,000,000)

출력 형식

각 테스트 케이스에 대해 첫 번째 줄에 총 기부금을, 두 번째 줄에 평균 기부금을 (소수점 첫째자리에서 반올림) 출력하세요.

예제 입력

        2
        3
        1000 2000 3000
        4
        500 600 700 800
        

예제 출력

        6000
        2000
        2600
        650
        

해결 방법

문제를 해결하기 위해 다음 단계를 따릅니다:

  1. 입력 받기: 표준 입력을 통해 데이터를 읽어들입니다.
  2. 기부금 총합과 평균 계산: 각 테스트 케이스마다 기부금을 합산하고 평균을 계산합니다.
  3. 출력 형식 맞추기: 결과를 요구 사항에 맞게 출력합니다.

코드 구현

        fun main() {
            val reader = System.`in`.bufferedReader()
            val T = reader.readLine().toInt() // 테스트 케이스 수
            
            repeat(T) {
                val N = reader.readLine().toInt() // 기부자 수
                val donations = reader.readLine().split(" ").map { it.toInt() } // 기부금 리스트
                
                val total = donations.sum() // 총 기부금
                val average = total / N.toDouble() // 평균 기부금 (소수점 포함)
                
                println(total) // 총 기부금 출력
                println(average.roundToInt()) // 평균 기부금(소수점 첫째자리에서 반올림)
            }
        }
        

코드 설명

코드 분석 및 설명:

  • 입력 읽기: reader.readLine().toInt()를 사용하여 첫 번째 입력(T)을 읽고, 여러 줄에 걸쳐 기부자 수(N)와 기부금 리스트를 읽습니다.
  • 기부금 계산: donations.sum()을 통해 총 기부금을 쉽게 계산하고, total / N.toDouble()로 평균 기부금을 도출합니다.
  • 결과 출력: 각 테스트 케이스에 대해 결과를 두 줄로 출력합니다. average.roundToInt()를 사용해 소수점을 반올림합니다.

시간 복잡도

본 알고리즘의 시간 복잡도는 O(N)입니다. 각 테스트 케이스마다 기부금 리스트를 순회하며 합계를 계산하기 때문입니다.
여기서 N은 각 테스트 케이스에 있는 기부자의 수를 나타냅니다.

결론

본 문제는 기부금을 관리하고 계산하는 간단한 알고리즘 문제이지만,
코틀린 언어의 다양한 기능을 통해 보다 효율적으로 문제를 해결할 수 있습니다.
여러분도 이와 같은 방식으로 코딩 테스트에 대비하여 알고리즘 문제를 효과적으로 푸는 연습을 해보시기 바랍니다.