#33. 백준 1110번 문제 풀이: 더하기 사이클 문제 원본 보기
0 이상 99 이하의 정수가 주어진다. 26이 주어질 경우, 2+6 = 8 : 각 자리를 하나씩의 숫자로 생각하고 더한다. 그리고 6과 8을 붙인 수 68을 새로운 수로 한다. 68 > 6+8 = 14 : 8과 14의 1의 자리수를 붙인다. 84 가 된다. 84 > 8+4 = 12 : 4와 12의 1의 자리수를 붙인다. 42 가 된다. 42 > 4+2 = 6 : 2와 6을 붙인다. 26(처음수와 같다). 4번의 싸이클을 돌고 처음수가 되었다. N 이 주어졌을 때, N의 싸이클 길이를 구하는 프로그램을 작성하라.
입력/출력
--입력--
26
--출력--
4
문제풀이+해설
두자리 숫자가 있을 때 각 1의 자리, 10의 자리 수를 하나의 수로 분리하는 게 핵심이다.
또한 분리된 수를 문자열 붙이듯 두자리 숫자로 만드는게 핵심이다.

26을 2와 6로 분리하려면, 26/10 = 2(나누기 정수 몫), 26%10 = 6(나눈 나머지값) 으로 계산한다.
2와 6를 두자리로 붙이려면, 2*10 + 6 = 26이 된다.

위의 문제 조건을 앞에 방식으로 식으로 만들면 다음과 같다. 식에 26 을 넣으면 68이 나온다.
 ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10) 
=   26%10 * 10   +   ( 26/10   +  26%10 )%10
=     6 * 10     +     ( 2     +   6 )%10
=      60        +          8
=               68      
code sol.
#include <stdio.h>

int main() {
  int n, n0, count = 0;
  scanf("%d", &n); // 숫자를 입력받아서 n에 대입
  n0 = n; // 처음값 n0 에 저장
  while(1) { // 무한 루프
    count ++; // 루프 수 카운트
    n = ((n % 10) * 10) + (((n / 10) + (n % 10)) % 10); // 새로운 수 공식
    //     1의자리 *10     +    (10의자리 + 1의 자리)의 1의 자리수
    if(n0 == n) break; // 처음수와 새로운 수가 같으면 루프 끝
  }
  printf("%d", count); // 루프수(사이클수) 출력
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.