728x90
- 문제 사이트: https://www.acmicpc.net/problem/2851
누적 합을 계산하고 푸는 문제이다.
10개의 값이 주어졌을 때,
1) 모든 수를 합하기 전에 100에 도달한 경우
2) 모든 수를 합하였으나, 100에 도달하지 못한 경우
이렇게 두 케이스로 나누어 결과를 계산해주어야 한다.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int num[10];
for (int& n : num)
cin >> n;
int sum1 = 0;
int sum2 = 0;
for (int n : num)
{
sum1 = sum2;
sum2 += n;
// 모든 수를 합하기 전에 100에 도달한 경우
if (sum2 >= 100)
{
if (abs(sum1 - 100) >= abs(sum2 - 100))
cout << sum2;
else
cout << sum1;
return 0;
}
}
// 모든 수를 합하였으나 100이 되지 않는 경우
cout << sum2;
return 0;
}
- 메모리: 2020 KB
- 시간: 0 ms
- 코드 길이: 607 B
두 케이스를 확인하는 것이 아닌, 수를 합할 때마다 비교해서 가장 작은 값을 설정해 주는 방법도 있다.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int num[10];
for (int& n : num)
cin >> n;
int result = 0;
int sum = 0;
for (int n : num)
{
sum += n;
if (abs(result - 100) >= abs(sum - 100))
result = sum;
}
cout << result;
return 0;
}
- 메모리: 2020 KB
- 시간: 0 ms
- 코드 길이: 335 B
728x90
'Algorithm > BackJoon' 카테고리의 다른 글
12789번: 도키도키 간식드리미 (0) | 2023.09.03 |
---|---|
11659번: 구간 합 구하기 4 (0) | 2023.09.01 |
5337번: 웰컴 (0) | 2023.07.11 |
3046번: R2 (0) | 2023.07.09 |
24723번: 녹색거탑 (0) | 2023.07.07 |
댓글