코딩테스트 & 문제 풀이

[C]백준_1110 : 더하기 사이클

Hicecream 2023. 4. 17. 00:10

2022년 5월 12일에 작성됨

 

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

 

문제 분석

수 입력(26)-> 각 자리 숫자의 합(2+6=8)-> 원래 수의 맨오른쪽 숫자(6)와 구한 합의 맨 오른쪽 숫자(8)를 합쳐서 새로운 수(68) 만듦.
이 과정을 반복하여 원래 수로 돌아오기 까지 실행한 횟수(사이클)를 구하는 것.

 

 

소스 코드(⭕)

#include <stdio.h>

int main(void)
{
	int num1, num2, cycle = 0;		// cycle은 0으로 시작

	scanf("%d", &num1);
	num2 = num1;		

	while (1) {			// while(1) : 무한 루프를 수행하는 반복문
		num1 = (num1 % 10) * 10 + ((num1 / 10 + num1 % 10) % 10);	
		cycle++;		// while문이 한 번 시행될 때마다 1씩 증가

		if (num1 == num2)		// 초깃값과 새로운 수가 일치한다면 while문 탈출
			break;
	}
	printf("%d", cycle);
	return 0;
}

 

코드 분석

1. 맨 처음 입력 받은 수 num1을 while 문으로 들어가기 전에 num2에 저장해준다. while 문으로 들어가면 num1이 계속해서 새로운 수로 바뀌기 때문이다.

 

2. 그 다음 무한 반복문을 정의한 뒤, 새로운 수를 만드는 연산식을 세워주고, 식이 한 번 시행될 때 마다 cycle이 1씩 증가하게 해준다. (여기서 'cycle'은 while 루프가 반복된 횟수로, 0으로 시작하여 while 문이 한 번 시행될 때 마다 1씩 증가함)

 

3. 마지막으로, num2에 저장되어 있는 초깃값과 새로운 수인 num1이 일치한다면 while 문을 빠져나가도록 한다.

 

 

 

end

while 문이 아직 익숙하지 않아서 더 꼼꼼하게 코드를 분석해봤다.

코드 줄마다 의미를 이해하고 나니까 while 문의 구조에 대해 어느정도 감이 오기 시작한다.