https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
실버 5의 문제이다. 처음엔 되게 막막 했었는데 생각 보다 쉬웠다.
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
//freopen("input.txt","r",stdin);
long long s,n;
cin>>s;
int i=1;
int res=0;
long long sum=0;
while(true){
sum+=i;
res++;
if(sum>s){
cout<<res-1;
break;
}
i++;
}
}
풀이 과정은 다음과 같다.
일단 문제에서 자연수 N의 최댓값은 얼마인지 물어보았다. 이말은 더하는 수가 최대한 많아야 한다는 뜻이고, 이는 작은수를 최대한 이용해야 한다는 뜻이다.
그래서 나는 문제의 예시인 S=200 일때를 먼저 해보았다.
1+2+3+...+18+19 = 190 이다. 여기서 하나를 더 더해보면 210이 된다. 여기서 알아 챘다. 중간에 어느 한 수를 빼면 되는구나. 그리고 뒤에 하나의 수를 그냥 붙이면 어차피 더하는 수의 개수는 똑같겠구나!
따라서 그렇게 코드를 작성 했다. 주의할 점은 S의 범위가 대략 42억, 즉, int의 범위를 벗어났고 long long형으로 해결 해 주었다.
'BOJ 문제풀이' 카테고리의 다른 글
#1080 행렬 (0) | 2022.05.22 |
---|---|
#2012 등수 매기기 (0) | 2022.05.21 |
#18310 안테나 (0) | 2022.05.21 |
#1449 수리공 항승 (0) | 2022.05.19 |
#2589 보물섬 (0) | 2022.05.18 |