Koala - 9기/기초 알고리즘 스터디

[백준/Python] 7523번 가우스

en2014 2023. 2. 5. 21:15

https://www.acmicpc.net/problem/7523

 

7523번: Gauß

각 테스트 케이스마다 "Scenario #i:"를 출력한 다음, n부터 m까지 모든 정수의 합을 출력한다. 각 테스트 케이스 사이에는 빈 줄을 하나 출력한다.

www.acmicpc.net

문제분석

입력으로 작은 정수(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))