코틀린 코딩테스트 강좌, 연속된 자연수의 합 구하기

문제 설명

연속된 자연수의 합을 구하는 문제는 흔히 자주 등장하는 코딩 테스트의 주제 중 하나입니다.
입력된 정수 N에 대해 1, 2, …, M까지의 연속된 자연수의 합이 N이 되는
M을 찾는 문제입니다. 여기서 M은 자연수로 1 이상이어야 하며,
이때 연속된 자연수의 합은 다음과 같은 수식으로 구할 수 있습니다:

S = 1 + 2 + 3 + ... + M = M * (M + 1) / 2

입력

– 정수 N (1 ≤ N ≤ 1,000,000) – 구하고자 하는 자연수의 합

출력

– 연속된 자연수 1부터 M까지의 합이 N이 될 때, M을 출력합니다.
– 만약 M이 존재하지 않으면 -1을 출력합니다.

문제 접근 방법

이 문제를 해결하기 위해서는 먼저 S = N의 조건을 수식으로 바꾸어 보는 것이 좋습니다.
S = 1 + 2 + ... + MN으로 설정했을 때, 이를 정리하면 다음과 같습니다:

N = M * (M + 1) / 2

위의 식을 변형하여 2N = M * (M + 1)으로 나타낼 수 있습니다.
이 식을 이용해 M을 구하고, 그 값이 자연수인지 확인하는 방식으로 접근할 수 있습니다.

해결 과정

1. N에 대해 가능한 M을 찾기 위해 M을 1부터 시작하여 증가시키면서
S를 계산합니다.
2. SN과 같아질 경우 M을 출력하고 종료합니다.
3. SN을 초과하면 더 이상 탐색할 필요가 없는 경우, -1을 출력하고 종료합니다.

코드 구현

아래는 위의 로직을 코틀린으로 구현한 코드입니다.

fun findContinuousNaturalSum(N: Int): Int {
        var sum = 0
        for (M in 1..N) {
            sum += M
            if (sum == N) {
                return M
            } else if (sum > N) {
                return -1
            }
        }
        return -1
    }

    fun main() {
        val N = 15
        val result = findContinuousNaturalSum(N)
        println("연속된 자연수의 합이 $N이 되는 M은: $result")
    }

코드 설명

findContinuousNaturalSum 함수는 입력 N에 대해 연속된 자연수를 더해
N에 도달할 수 있는 M을 찾습니다.
sum 변수는 1부터 M까지의 합을 저장하고 있습니다.
for 반복문을 통해 M을 1부터 N까지 증가시키면서
sum을 계산합니다.
sumN과 같아지면 M을 반환하고,
sumN을 초과하면 -1을 반환하여 종료합니다.

예제

입력: 15
출력: 5
설명: 1+2+3+4+5 = 15이므로 M은 5입니다.

입력: 14
출력: -1
설명: 1부터 M까지의 합이 14가 되는 경우는 없습니다.

결론

연속된 자연수의 합을 구하는 문제는 프로그래밍의 기본적인 반복문과 조건문을 잘 활용하는 데 중요한 문제입니다.
이 문제를 통해 코틀린에서의 기본 문법과 로직 구성 능력을 기를 수 있으며,
알고리즘 문제 풀이에 대한 접근 방식을 배우는 데 큰 도움이 됩니다.
향후 다양한 문제를 풀기 위해 이러한 기본 문제를 충분히 연습해보시기를 바랍니다.