문제
두 정수 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의 제한이 넓고, 시간 제한도 0.25 초라서 단순 브루트포스(A부터 B까지 합을 반복문으로 하나씩 더하기) 로는 해결할 수 없다. 따라서 이를 A와 B 사이에 있는 수의 합을 한번에 구할 수 있을 수식이 필요하다.
필자는 가우스 공식을 활용하여, A < B 라고 할 때, (1부터 B까지의 합) - (1부터 (A-1)까지의 합) 으로 구했다.
B가 A보다 크지 않은 케이스가 있을 수 있으니 유의하자.
C
#include <stdio.h>
int main(void) {
long long a, b;
scanf("%lld %lld", &a, &b);
if (a > b) {
long long tmp = a;
a = b;
b = tmp;
}
printf("%lld", (b*(b+1)/2) - (a*(a-1)/2));
return 0;
}
Python
a, b = map(int, input().split())
n1, n2 = min(a, b), max(a, b)
print(((n2*(n2+1))//2)-((n1*(n1-1))//2))
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 1402 : 아무래도이문제는A번난이도인것같다 ( SILVER 5 ) / C, Python (0) | 2023.10.03 |
---|---|
[ BOJ ] 23825 : SASA 모형을 만들어보자 ( BRONZE 4 ) / C, Python (0) | 2023.10.03 |
[ BOJ ] 17263 : Sort 마스터 배지훈 ( BRONZE 3 ) / C, Python (0) | 2023.10.03 |
[ BOJ ] 29807 : 학번을 찾아줘! ( BRONZE 4 ) / C, Python (0) | 2023.10.02 |
[ BOJ ] 1085 : 직사각형에서 탈출 ( BRONZE 3 ) / C, Python (0) | 2023.10.02 |