반응형

문제 출처 : 


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




알고리즘 분석 :


문제를 보면 어떤 수가 주어졌을 때 최대 몇개의 수를 더하여 이 수를 만들 수 있을까이다.


예를들어 7이면 1 2 4로 만들 수 있고 10이면 1 2 3 4로 만들 수 있다.


200이면? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 까지 더하면 190이다.


하지만 여기서 19를 빼면 171인데 여기서 29를 더하면 된다.


느낌이 오면 이 문제는 해결이 가능하다.


그냥 1에서부터 계속 더해서 그 수보다 커지기 직전 값만 바꾸면 끝이다. 즉, 19를 29로만 바꾸면 된다고 생각하는 코드를 작성하면 된다.




소스 코드 : 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
long long int s, sum = 0;
 
int main()
{
    int n;
    int num = 0;
 
 
    scanf("%lld"&s);
 
    for (int i = 1; ; i++)
    {
        sum = sum + i;
        
        if (sum > s)
            break;
        else
            num++;
    }
    printf("%d", num);
}
 
//                                                        This source code Copyright is Crocus 
//                                             Do you want to see more contents? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[5988번] 홀수일까 짝수일까  (0) 2016.07.10
[10610번] 30  (0) 2016.07.09
[10829번] 이진수 변환  (0) 2016.07.09
[10942번] 팰린드롬?  (0) 2016.07.06
[11047번] 동전 0 (Greedy Algorithm)  (0) 2016.07.05