C언어/BAEKJOON

[백준] 1110. 더하기 사이클

너굴맨이해치움 2022. 7. 13. 22:50

: solved.ac - bronze 1

 

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

 

 

예제 입력 1

55

 

예제 출력 1

3

 

예제 입력 2

1

 

예제 출력 2

60

 

예제 입력 3

0

 

예제 출력 3

1

 

 

정답

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {

	int n, num, a, b, sum;
	int cycle = 0;
	scanf("%d", &n);

	num = n;

	while (1) {
		a = num / 10;
		b = num % 10;
		sum = a + b;
		num = (b * 10) + (sum % 10);
		cycle++;
		if (num == n) break;
	}

	printf("%d", cycle);

	return 0;
}

 


해설

 

: 문제에서 제시된 식만 구현할 수 있다면 간단한 문제이다.

 

  • 처음 숫자를 변수 n에 받아 놓고, 별도 변수 num을 선언하여 n의 값을 복사한다.
  • num의 십의 자리 숫자(num/10)을 a에, 일의 자리 숫자(num%10)을 b에 저장한다.
  • a와 b를 더한 값을 sum이라는 별도 변수에 저장한다.
  • b에 10을 곱해 10의 자리 수로 삼고, sum의 1의 자리 숫자를 1의 자리 수로 삼아 새로운 숫자를 만든다.
  • 새 숫자를 num에 저장해 새로운 num을 만든다.
  • 여기까지가 한 사이클이므로 cycle 변수를 1 증가시킨다.
  • num이 처음 값인 n과 같아졌다면 반복문을 탈출한다.
  • 이 과정을 탈출문의 조건이 만족될 때까지 반복한다.