https://www.acmicpc.net/problem/2355
난이도 : 브론즈 2
태그 : 수학, 사칙연산
설명
A 부터 B 까지의 합을 구하는 문제이지만, 단순히 for문을 사용해 구할 경우 시간초과가 납니다.
(-2,147,483,648 ≤ A, B ≤ 2,147,483,647)
A, B의 범위가 매우 크기 때문이죠.
for문을 사용해 구하게 될 경우 매우 많은 연산을 수행하게 될 수 있습니다.
그렇다면 어떻게 해야 할까요? 힌트는 문제 제목에 있습니다.
1부터 n까지의 합을 구하는 유명한 공식이 하나 있습니다.
위 공식을 사용한다면 적은 연산 횟수로 해를 찾아낼 수 있으며,
a ~ b 까지의 합 -> (1 ~ b 까지의 합) - (1 ~ a 까지의 합)으로 쉽게 구할 수 있습니다.
소스코드
fun main() {
val line = readLine()!!.split(" ")
var a = line[0].toLong()
var b = line[1].toLong()
var result:Long =
if (a < b) (b * (b + 1)) / 2 - (a * (a - 1) / 2)
else (a * (a + 1)) / 2 - (b * (b - 1) / 2)
print(result)
}
주의할 점은, 항상 a < b인 것은 아니기 때문에 둘 중 어떤 수가 더 큰지 확인해야 합니다
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 17142번] [Kotlin] 연구소 3 (0) | 2023.06.02 |
---|---|
[백준 20058번] [Kotlin] 마법사 상어와 파이어스톰 (1) | 2023.06.02 |
[백준 13904번] [Kotlin] 과제 (0) | 2023.05.25 |
[백준 24479번] [Kotlin] 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2023.05.25 |
[백준 3109번] [Kotlin] 빵집 (0) | 2023.05.24 |