알고리즘 연습/수학, 정수론, 기하

[🥉3 / 백준 2355 / 파이썬] 시그마

김세진 2022. 3. 22. 16:55
반응형

 

 

2355번: 시그마

첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)

www.acmicpc.net

 

문제

두 정수 A와 B가 주어졌을 때, 두 정수 사이에 있는 수의 합을 구하는 프로그램을 작성하시오. 사이에 있는 수들은 A와 B도 포함한다.

입력

첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)

출력

첫째 줄에 답을 출력한다. (-2,147,483,648 ≤ 답 ≤ 2,147,483,647)

 

예제 입력

1 2

예제 출력

3

 

풀이

 

범위가 매우 넓기 때문에 단순 for문으로 계산을 시도하면 시간초과 혹은 메모리초과가 발생하게 된다.

따라서 O(1)만에 문제를 해결할 수 있는 가우스의 공식을 활용한다.

 

1부터 n까지의 합은 (n+1) * n // 2 라고 표현할 수 있다.

하지만, 이 문제는 1부터의 합이 아닌 a부터 b까지의 합이다.

따라서, 1부터 b까지의 합과 1부터 a-1까지의 합의 차를 출력한다.

단, a < b로 고정하기 위해 a가 b보다 크면 두 수를 교체해준다.

 

a,b = map(int,input().split())
if a>b:
    a,b=b,a
print(b*(b+1)//2-a*(a-1)//2)
반응형