BOJ

[BOJ 1789 // C++] 수들의 합

measurezero 2021. 3. 21. 10:00

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1789번 문제인 수들의 합이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/1789

 

1789번: 수들의 합

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

www.acmicpc.net

이 문제는 다음 두가지 사실의 관찰으로 간단한 산수를 이용해 풀 수 있다.

1) 자연수 n*(n+1)/2는 1부터 n까지의 (서로 다른) 수의 합으로 나타낼 수 있다.

2) n*(n+1)/2보다 크고 (n+1)*(n+2)/2보다 작은 수는 1부터 n+1까지의 수 가운데 하나를 제외한 나머지의 합으로 나타낼 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <cmath>
using std::cin; using std::cout;
using std::sqrt;
int main()
{
    long long N; cin >> N;
    long long sqrtn = sqrt(N * 2);
    if (sqrtn * (sqrtn + 1) / 2 <= N) cout << sqrtn;
    else cout << sqrtn - 1;

    return 0;
}
728x90