728x90
https://www.acmicpc.net/problem/2355
문제
두 정수 A와 B가 주어졌을 때, 두 정수 사이에 있는 수의 합을 구하는 프로그램을 작성하시오. 사이에 있는 수들은 A와 B도 포함한다.
입력
첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)
출력
첫째 줄에 답을 출력한다. (-2,147,483,648 ≤ 답 ≤ 2,147,483,647)
해설
처음 문제를 봤을 때는 반복문을 통해 A부터 B까지의 수를 다 더하면 되겠구나 하고 시도를 해보았다.
이 시도는 시간 초과가 떠 다른 방법으로 접근을 해야 했다.
떠오른 방법으로는 반복문을 돌리지 않고 수학 공식 중 등차수열일 때 두 수 사이의 합을 구하는 공식을 이용하는 것이다.
1부터 n 사이의 합 공식은 n(n+1)/2이다.
이것을 풀어보면 (수의 개수) * (마지막 수 + 처음 수) / 2이다.
이 공식을 문제에 적용해보면 A가 B보다 작거나 같을 때 (B - A + 1 ) * (B + A) / 2이고,
A가 B보다 크다면 (A - B + 1) * (A + B) / 2를 하면 된다.
소스 코드
fun main() {
val input = readLine()!!.split(" ")
val a = input[0].toLong()
val b = input[1].toLong()
var result: Long = 0
if(a <= b) result = (b - a + 1) * (b + a) / 2
else result = (a - b + 1) * (a + b) / 2
println(result)
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 2441번: 별 찍기 - 4 (0) | 2021.11.16 |
---|---|
[백준/BOJ] 2440번: 별 찍기 - 3 (0) | 2021.11.16 |
[백준/BOJ] 2439번: 별 찍기 - 2 (0) | 2021.11.10 |
[백준/BOJ] 2061번: 좋은 암호 (0) | 2021.11.09 |
[백준/BOJ] 16428번: A/B - 3 (0) | 2021.11.09 |
댓글