문제 설명
연속된 자연수의 합을 구하는 문제는 흔히 자주 등장하는 코딩 테스트의 주제 중 하나입니다.
입력된 정수 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 + ... + M를 N으로 설정했을 때, 이를 정리하면 다음과 같습니다:
N = M * (M + 1) / 2
위의 식을 변형하여 2N = M * (M + 1)으로 나타낼 수 있습니다.
이 식을 이용해 M을 구하고, 그 값이 자연수인지 확인하는 방식으로 접근할 수 있습니다.
해결 과정
1. N에 대해 가능한 M을 찾기 위해 M을 1부터 시작하여 증가시키면서
S를 계산합니다.
2. S가 N과 같아질 경우 M을 출력하고 종료합니다.
3. S가 N을 초과하면 더 이상 탐색할 필요가 없는 경우, -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을 계산합니다.
– sum이 N과 같아지면 M을 반환하고,
sum이 N을 초과하면 -1을 반환하여 종료합니다.
예제
입력: 15
출력: 5
설명: 1+2+3+4+5 = 15이므로 M은 5입니다.
입력: 14
출력: -1
설명: 1부터 M까지의 합이 14가 되는 경우는 없습니다.
결론
연속된 자연수의 합을 구하는 문제는 프로그래밍의 기본적인 반복문과 조건문을 잘 활용하는 데 중요한 문제입니다.
이 문제를 통해 코틀린에서의 기본 문법과 로직 구성 능력을 기를 수 있으며,
알고리즘 문제 풀이에 대한 접근 방식을 배우는 데 큰 도움이 됩니다.
향후 다양한 문제를 풀기 위해 이러한 기본 문제를 충분히 연습해보시기를 바랍니다.