티스토리 뷰
[ 해결 방법 ]
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 |