본 강좌에서는 코틀린 언어를 사용하여 취업용 알고리즘 문제를 해결하는 과정을 단계적으로 설명합니다. 이번 문제는 ‘불우이웃돕기’라는 주제로, 주어진 입력에 대해 올바른 출력을 도출하는 방식으로 진행됩니다.
문제 설명
한국의 한 자선단체에서는 매달 불우이웃에게 기부금을 전달하고 있습니다. 기부금 모금에 대한 데이터가 주어질 때,
기부금의 총합과 각 신청자의 기부금 평균을 계산하는 프로그램을 작성하세요.
입력 형식
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
해결 방법
문제를 해결하기 위해 다음 단계를 따릅니다:
- 입력 받기: 표준 입력을 통해 데이터를 읽어들입니다.
- 기부금 총합과 평균 계산: 각 테스트 케이스마다 기부금을 합산하고 평균을 계산합니다.
- 출력 형식 맞추기: 결과를 요구 사항에 맞게 출력합니다.
코드 구현
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은 각 테스트 케이스에 있는 기부자의 수를 나타냅니다.
결론
본 문제는 기부금을 관리하고 계산하는 간단한 알고리즘 문제이지만,
코틀린 언어의 다양한 기능을 통해 보다 효율적으로 문제를 해결할 수 있습니다.
여러분도 이와 같은 방식으로 코딩 테스트에 대비하여 알고리즘 문제를 효과적으로 푸는 연습을 해보시기 바랍니다.