https://www.acmicpc.net/problem/2851
코드 (C)
#include <stdio.h>
int main()
{
int arr[11], sum=0;
for (int i = 0; i < 10; i++) scanf("%d", &arr[i]);
for (int i = 0; i < 10; i++)
{
if (sum <= 100 && sum + arr[i] >= 100)
{
if (100 - sum < sum + arr[i] - 100)
{
printf("%d", sum);
return 0;
}
else
{
printf("%d", sum + arr[i]);
return 0;
}
}
sum += arr[i];
}
printf("%d", sum);
return 0;
}
코드 (C++)
#include <iostream>
using namespace std;
int main()
{
int arr[11], sum = 0;
for (int i = 0; i < 10; i++) cin >> arr[i];
for (int i = 0; i < 10; i++)
{
if (sum <= 100 && sum + arr[i] >= 100)
{
if (100 - sum < sum + arr[i] - 100)
{
cout << sum;
return 0;
}
else
{
cout << sum + arr[i];
return 0;
}
}
sum += arr[i];
}
cout << sum;
return 0;
}
코드설명
배열을 통해 입력받는 10개의 값을 저장한다.
반복문을 돌면서 값들을 더해나가는데, 받은 점수의 합을 최대한 100에 가깝게 하기 위해서 만약 값이 100보다 작은 수에서 100을 넘어가는 경우에는 조건문으로 값을 확인한다.
100에 가까운 수에서 100을 뺀 값의 절댓값을 서로 비교하는데, 만약 100보다 작은 수가 더 100과 가까울 경우에는 100보다 작은 값인 sum을 출력하고 프로그램을 종료한다. 만약 그에 해당하지 않는 경우에는 sum+arr[i]를 더한 값(100을 넘어감)을 출력하고 프로그램을 종료한다.
반복문을 끝까지 돌았는데, 합이 100을 초과하지 않는 경우에는 합을 출력하고 프로그램을 종료한다.
느낀 점
처음에 코드를 작성할 때 가장 마지막 두 줄을 작성하지 않았다. 당연히 더해나가다 보면 100을 초과하는 경우가 발생할 것이라고 생각한 나의 실수였다. 입력값이 어떻게 나올 지 모르므로 각 경우를 모두 고려해야 한다는 것을 다시 느꼈던 문제였다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 15813 너의 이름은 몇 점이니? (0) | 2022.09.11 |
---|---|
[백준/C & C++] 5565 영수증 (0) | 2022.09.07 |
[백준/C & C++] 1259 펠린드롬수 (0) | 2022.09.05 |
[백준/C & C++] 3009 네 번째 점 (0) | 2022.09.04 |
[백준/C & C++] 5724 파인만 (0) | 2022.09.04 |