https://www.acmicpc.net/problem/2355
시간제한이 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;
}
'백준 문제풀이 > 브론즈3' 카테고리의 다른 글
백준 2506번 - 점수계산 (0) | 2021.11.10 |
---|---|
백준 1284번 - 집 주소 (0) | 2021.10.20 |
백준 2501번 - 약수 구하기 (0) | 2021.10.20 |
백준 1267번 - 핸드폰 요금 (0) | 2021.10.18 |