개발일기

백준 2355번 파이썬 문제 풀이 : 시그마 본문

알고리즘 문제풀이/백준

백준 2355번 파이썬 문제 풀이 : 시그마

한민기 2021. 10. 4. 20:53
반응형

문제 링크 : https://www.acmicpc.net/problem/2355

 

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)

 

 

# 문제 풀이

굉장히 쉬운 문제이다. 

입력 값 a, b 가 있으면 a 부터 b까지 반복하며 더해주면 된다

 

1
2
for i in range(a, b+11):
    answer += i
cs

 

이렇게 제출하게 되면 시간 초과가 발생하게 되어 Pypy3로도 제출 해보았지만 똑같았다. 

 

그래서 혹시 수학 공식중 1 ~ 10 까지의 합을 구할 때 10 * 11 / 2를 하여 55 라는 값을 구한 적이 있다.

 

해당 공식을 응용하여 문제를 풀어 보았다.

 

1
2
3
4
5
6
7
8
a, b = map(int, input().split())
answer = 0
if a - b < 0:
    temp = b - a
else:
    temp = a - b
 
print((temp * (temp + 1)) // 2 + (min(a, b) * (temp + 1)))
cs

 

3과 10을 입력 받았다고 가정하면

3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 이된다. 이걸 정리하자면 3 + (3 + 1) + (3 + 2) + --- + (3 + 7)이 될 수 있다.

여기서 3을 7 + 1번 곱해준 후에 1부터 7까지의 수를 더하면 된다.

 

예제를 위 식에 대입해보면 temp 는 7이 될 것이고 min(a, b)는 3이 된다.

 

따라서 7 * 8 // 2를 통해 1 부터 7까지의 합을 구할 수 있고 3 * (7 + 1) 을 통해 3을 8번 더할 수 있다.

 

반응형
Comments