반응형
문제
두 정수 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)
반응형
'알고리즘 연습 > 수학, 정수론, 기하' 카테고리의 다른 글
[🥈3 / 백준 2407 / 파이썬] 조합 (0) | 2022.03.31 |
---|---|
[🥉5 / 백준 14652 / 파이썬] 나는 행복합니다~ (0) | 2022.03.23 |
[🥉3 / 백준 9610 / 파이썬] 사분면 (0) | 2022.03.17 |
[🥉3 / 백준 10103 / 파이썬] 주사위 게임 (0) | 2022.03.06 |
[🥈3 / 백준 13241 / 파이썬] 최소공배수 (0) | 2022.02.22 |