https://www.acmicpc.net/problem/7523
문제분석
입력으로 작은 정수(a)와 큰 정수(b)가 들어오고, a이상 b이하의 모든 정수의 합을 구하면 된다.
문제풀이
가우스공식?을 쓴다 즉,
숫자가 총 짝수개 있을 경우:
(처음수 + 마지막 수) * (숫자의 총개수 의 절반)
숫자가 총 홀수개 있을 경우:
(처음수 + 마지막 수) * (숫자의 총개수-1 의 절반) + 가운데 수
하지만 저 공식은 수가 둘 다 0이상의 정수 일 때만 쓸 수 있는 공식이므로 a 와 b가 각각 양수 하나, 음수 하나일 경우에는 가우스 공식을 적용 할 수 있는 작은 정수와 큰 정수로 바꿔야한다.
실제로 a부터 b까지 더했을때 절댓값이 같아서 소거되는 수들을 제외하고 나머지 수들 중에서 작은정수와 큰정수를 정하면 된다.
n = int(input())
for i in range(n):
a, b = map(int, input().split())
if (a*b) < 0:
if max(abs(a), abs(b)) == abs(a):
b = a + abs(a+b)-1
else:
a = b - (a + b - 1)
bothends = (a+b)
num = b-a + 1
if num == 1:
sum = bothends//2
elif num % 2 == 0:
sum = bothends * num//2
elif num % 2 != 0:
mid = a + num//2
sum = bothends * (num//2)
sum += mid
print("Scenario #{}:\n{}\n".format(i+1, sum))
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] 2566번 최댓값 (0) | 2023.02.05 |
---|---|
[백준/Java] 7795번 먹을 것인가 먹힐 것인가 (0) | 2023.02.05 |
[백준/python] 10798번 : 세로읽기 (0) | 2023.02.05 |
[백준/python] 18406 (0) | 2023.02.05 |
[백준/python] 7523 Gauß (0) | 2023.02.05 |