비트(bit)주세요

백준 1110번 : 더하기 사이클 본문

문제풀이/백준 알고리즘(C언어)

백준 1110번 : 더하기 사이클

yglee730 2021. 4. 22. 22:34
728x90

www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

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

www.acmicpc.net

 문제 설명 :

      26으로 시작 -> num = 26        

      num의 각 자릿수를 더함(연산)   -> 2 + 6 = 08 , c=08

      num = ((num%10)*10) + (c%10) 

   

     연산 전(=26) 일의 자리 수(6)*10 + 연산 후(=08) 일의 자리 수(8)  

            -> num=68, 사이클 길이 +1   

     연산 전(=68) 일의 자리 수(8)*10 + 연산 후(=14) 일의 자리 수(4)

            -> num=84, 사이클 길이 +1

     연산 전(=84) 일의 자리 수(4)*10 + 연산 후(=12) 일의 자리 수(2) 

            -> num=42, 사이클 길이 +1

    연산 전(=42) 일의 자리 수(2)*10 + 연산 후(=06) 일의 자리 수(6)

             -> num=26, 사이클 길이 +1

     26으로 끝

 

풀이 과정 설명 :

처음 숫자를 변수(num)에 입력 받고 변수에 연산을 하면서 변수(num) 값을 바꾸어 나갈 것이다.

변수(num)의 값이 처음값으로 되돌아오면 반복연산(while)은 끝난다.

값이 처음으로 되돌아 왔는지 판단하기 위해서 처음에 입력받은 값을 다른 변수(first_result)에 따로 저장한다.

연산을 몇번 했는지 체크하기 위해서 0으로 초기화한 변수(i)를 선언해준다

 

연산을 할 땐, (/) 연산자와 (%) 연산자를 사용하여 숫자를 자릿수별로 나눈다.

2 + 6 같은 경우엔 값이 10미만이라 그냥 더해도 되는데

6 + 8 같은 경우엔 값이 10이상이라, 그냥 더하면 안된다

     -> 일의자릿수를 더하는거라서 그냥 더하면 14가 더해진다

              -> 나머지 연산(%)을 이용해서 일의자릿수만 뽑는다.

 

소스 코드 :

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
33
34
35
36
37
#include <stdio.h>
 
int main()
{
    int num; 
    int first_result;
    int i=0;
    
    scanf("%d",&num);
    
    first_result = num;
    
    while(1)
    {
        int a,b;
        
        a = num/10;
        b = num%10; //연산 전 일의자릿수 뽑아내기
        
        int c;
        c = a + b; //연산 후 일의 자릿수 뽑아내기
        
            if(c>=10)
                num = (b*10+ (c%10);
            else
                num = (b*10+ c;
    
        i++;
        
        if((num==first_result)&&(i>0))
            break;  
    }
    
        printf("%d\n",i);
        
    return 0;
}
cs

 

 

 

'문제풀이 > 백준 알고리즘(C언어)' 카테고리의 다른 글

백준 11720번 : 숫자의 합  (0) 2021.05.27
백준 8958번 : OX퀴즈  (0) 2021.05.14