티스토리 뷰

알고리즘/기초구현

백준_시그마

빨간공 2016. 9. 16. 22:05


[ 해결 방법 ]

1에서 n까지의 합은 아래 식과 같다.


이런 식이 어떻게 나왔는지 살펴보자. 예를 들어 6까지 수를 나타내면 다음과 같다.


1, 2, 3, 4, 5, 6


위의 수열의 합을 다음처럼 쉽게 생각할 수 있다.


(1 + 6) + (2 + 5) + (3 + 4) = 7 + 7 + 7 = 21


위 식을 자세히 살펴보면, 괄호 안에 첫번째 값은 1씩 증가하고 두 번재 값은 1씩 감소하기 때문에 계속 값이 같은 것이다.

이렇게 같은 합의 갯수가 n / 2개가 있다. 당연히 모든 수열을 두 개씩 짝지었기 때문이다.

수열의 개수가 짝수개 일때 아래의 식이 만들어진다.

그러면, 수열의 개수가 홀수 개일 때도 위 식이 성립할까?


1, 2, 3, 4, 5, 6, 7

이 수열을 다음처럼 배치하자.



(1 + 7) + (2 + 6) + (3 + 5) + 4 = 8 + 8 + 8 + 4


이번엔 수열의 중앙에 있는 값인 4가 하나 남는다. 일단 괄호 안에 합은 n+1이다. 그리고 괄호 안의 합의 개수는 ( n - 1 ) / 2이다. 그리고 수열의 중앙에 있는 값은 ( n + 1 ) / 2이다. 이제 수식을 만들어보면 아래와 같다.



이 식을 정리하면 짝수일 때와 같다. 결국 수열의 갯수가 짝수일때나 홀수일때나 수열의 합의 공식은 같다.


다시 문제로 들아와서, 1부터 j까지의 합과 1부터 i - 1까지의 합을 구한다음. 두 값을 빼주면 i부터 j까지의 합이 나온다.


[ 코드 ]

#include <stdio.h>
int main()
{
long long i, j, t, sum = 0;
scanf("%lld %lld", &i, &j);
if (i > j)
{
t = i;
i = j;
j = t;
}
--i;
sum = (j * (j + 1)) / 2 - (i * (i + 1)) / 2;
printf("%lld\n", sum);
return 0;
}


'알고리즘 > 기초구현' 카테고리의 다른 글

백준 - 개미  (0) 2016.12.27
백준_01타일  (0) 2016.09.08
백준_방번호  (0) 2016.09.08
codeground 개구리 뛰기  (0) 2016.08.25
codeground 프로그래밍 경진대회  (0) 2016.08.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함