본문 바로가기
알고리즘/문제

[백준] 1789. 수들의 합 <C++>

by 코드 이야기 2020. 6. 7.
728x90

https://www.acmicpc.net/problem/1789

 

1789번: 수들의 합

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

www.acmicpc.net

 

#include <iostream>
using namespace std;

long long s, sum, n;

int main() {
  cin>>s;

  for(int i=1; 1; i++)
  {
    sum+=i;
    if(sum>s)
    {
      n=i-1;
      break;
    }
  }
  cout<<n;

}

너무 간단하다 . . .

 

 

 

처음에 이 문제를 보고 이걸 어떻게 풀지..? 를 하아아아아아안참 고민했다..

 

그러나 규칙을 보니 생각보다 너어어어어어어무나 간단했다. 

 

그리고 문제의 조건을 잘 읽지 않고 int를 사용해서 틀리기도 했다...

 

 

 

어쨌든 내가 푼 방법은 이러하다.

 

입출력 예시를 예로 들어보겠다.

 

반복문을 1부터 시작하여 하나씩 늘리며 그 수들의 누적합을 구해준다.

 

1 + 2 + 3 + 4 + 5 + ... + 16 + 17 + 18 + 19

=190이다.

여기에 20을 더하면 200이 넘는다.

200이 넘으면 반복문을 종료시키고, n에 i-1을 담아주어 n을 출력한다.

 

총 19번이 더해진 것이다.

 

왜 이렇게 했냐 하면... 

 

결국 마지막에 더한 19를 29로 바꾸면 200이 된다.

 

즉, 마지막에 더하는 수(n개의 수 중에서 가장 큰 수)로 200을 맞춰주면 끝이다...

 

이 문제는 너무 야매스러워서 별로였다.. 

 

728x90

댓글