-- 예전 기록/BOJ

[ BOJ ] 2355 : 시그마 ( BRONZE 2 ) / C, Python

rejo 2023. 10. 3. 10:50

문제

두 정수 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))