블링블링 범블링

[백.단.풀.4] 더하기 사이클 (1110) 본문

알고리즘 문제풀이/백준

[백.단.풀.4] 더하기 사이클 (1110)

뻠스키 2019. 3. 12. 15:32
Step : <if문 사용해보기>

Title : " 더하기 사이클 "


시간 제한메모리 제한제출정답맞은 사람정답 비율
2 초128 MB141537034596951.035%

문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 숫자와 앞에서 구한 합의 가장 오른쪽 자리 숫자를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

26부터 시작한다. 2+6 = 8이다. 새로운 숫자는 68이다. 6+8 = 14이다. 새로운 숫자는 84이다. 8+4 = 12이다. 새로운 숫자는 42이다. 4+2 = 6이다. 새로운 숫자는 26이다.

위의 예는 4번만에 원래 숫자로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

예제 입력 

26

예제 출력 

4





이번에도 실수로 한번 틀렸습니다가 나왔다.ㅠ


이번은 문제를 잘 안 읽은 것이 아니라, 완벽하게 이해를 하지 않고 풀었기 때문에 틀렸다.


이 문제에서 예외처리는 0일 때 cycle이 한 번 돌고 같다는 것을 판단해야해서


답이 1이 나와야되는데, 그 예외처리를 마지막에 해주지 않아서 틀리게 되었다.


너무 쉬운 문제다 보니 문제를 이해하기 위해 공책에 필기하면서 이해하는 과정을 생략하고


코딩을 하니까 이런 실수가 생기는 것 같다.


이번에 느낀 것은 알고리즘 문제를 풀 때


필기하는 습관도 중요하다.


이다.





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
27
28
29
30
31
32
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
 
int N;
int original, cycle, cnt;
 
int main()
{
    scanf("%d"&N);
 
    original = N;
    while (cycle != original)
    {
        cycle = 0;
        if (N < 10) cycle = N;
        else {
            cycle += N / 10;
            cycle += N % 10;
        }
        cycle %= 10;
        cycle += (N % 10* 10;
 
        N = cycle;
        cnt++;
    }
 
    if (cnt == 0printf("1\n");
    else printf("%d\n", cnt);
 
    return 0;
}
cs


Comments