백준 문제풀이/브론즈3

백준 2355번 - 시그마

void_melody 2021. 10. 20. 00:23

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

 

2355번: 시그마

첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)

www.acmicpc.net

시간제한이 0.25초로 매우 빡세다.

처음에는 당연히 반복문을 이용해 하나씩 더해나가려 했다.

#include <iostream>

using namespace std;

int main()
{
	long a, b;
	long big, small = 0;
	long sum = 0;

	cin >> a >> b;
	a > b ? big = a, small = b : big = b, small = a;

	while (small <= big)
	{
		sum += small;
		small++;
	}

	cout << sum;

	return 0;
}

하지만 이렇게 하면 반복문 때문에 시간을 너무 잡아먹어서, 실패로 뜬다.

다음으로 생각한 건, 중학생 때 배운 공식을 활용하면 어떨까 싶었다.

1 2 3 4 5
5 4 3 2 1

이상하게도, 공식을 암기하진 않았는데 원리는 지금도 생생히 기억난다.

(처음 + 끝)  * 갯수 / 2 해주면 된다.

그냥 공식을 써버리면 바로 딱 값이 나오겠지를 활용했다.

#include <iostream>

using namespace std;

int main()
{
	long a, b;
	cin >> a >> b;

	if (a > b)
		cout << (a + b) * (a - b + 1) / 2;
	else
		cout << (b + a) * (b - a + 1) / 2;

	return 0;
}