본문 바로가기

BOJ 문제풀이

#1789 수들의 합

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