CS/백준 BOJ

[C언어] 백준 1110번 - 더하기 사이클

seomoon 2020. 3. 20. 23:15

문제 링크 : https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

풀이

#include  

int main() { 
    int n; 
    int a, b, c; 
    int cycle = 0; 
    int comp; 
    c = -1; 
     
    scanf("%d", &n); 
    comp = n; 
     
    do { 
        a = n/10; 
        b = n%10; 
        c = a + b; 
        n = b*10 + c%10; 
        cycle++; 
    } while (n!=comp); 
     
    printf("%d", cycle); 
    return 0; 
}

그렇게 깔끔하진 못한 것 같다. 그래도 맞다고 나오기는 했다. 

 

숫자를 자릿수에 따라 쪼개려면 나눗셈과 나머지연산을 이용하면 된다. 

 

주어진 수가 26일 때, 

주어진 수를 10으로 나눠 10의 자리를 구하고 (26/10 = 2),

주어진 수를 10으로 나눴을 때의 나머지를 구해 1의 자리를 구하면 된다. (26%10 = 6)

 

주어진 수가 두 자리수가 아닐 때도 같은 방법으로 하면 된다.

주어진 수가 9라면, 

9/10 = 0

9%10 = 9 이므로 문제에서 요구하는 조건을 만족한다. 

(문제 : 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. )