본문 바로가기

백준

1789)수들의 합

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


S는 서로 다른 자연수 N개의 합이다.


문제는 최대인 N을 찾는 것이다.


그러니까 서로 다른 자연수를 최대한 많이 더해서 S를 만들어야 한다.


S가 200이라 가정하고 바꿔서 생각해보자.


자연수를 최대한 많이 더해서 200을 만들려면 자연수 몇 개가 필요할까?


1을 200번 더해서 200을 만드는 방법이 가장 많은 갯수를 필요로 한다.


여기서 서로 다른 자연수가 될 수 있도록 200을 만드는 1들을 가능한 많이 묶는 방법이 뭘까?


하나의 묶음에 1을 하나씩 늘려나가는 것이다.


(묶어서 합하면 서로 다른 자연수가 된다.)


그러나 이렇게 묶으면 마지막 1 몇 개를 하나로 묶기에는 갯수가 모자란다.


이 1들을 다른 묶음에 하나씩 보내주더라도 최대로 묶는 방법임에는 의심이 없다.


이렇게 생각하면 묶이지 않은 1들을 고려할 필요가 없다.


그리고 1들의 묶음을 다시 표현하면 



그러니까 200보다 작은 n까지 자연수의 합에서 n이 바로 우리가 찾는 n이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
 
int main() {
    long long sum;
    long long n = 1;
 
    scanf("%lld",&sum);
 
    while ((n + 1)*/ 2 <= sum) {
        n++;
    }
    printf("%lld\n",n-1);
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

2108)통계학  (0) 2019.02.02
2563)색종이  (0) 2019.02.02
10798)세로읽기  (0) 2019.02.02
6376)e 계산  (0) 2019.02.02
4659)비밀번호 발음하기  (0) 2019.02.02