본문 바로가기

백준 문제풀이/반복문

백준 1110 C / 단계별로 풀어보기 - while 문 3

 

안녕하세요.

이번에는 1110 번, 더하기 사이클 입니다.

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

 

참신하네요. 왜 이런 일을 하는지는 모르겠지만, 여튼 시키니까 해봅시다.

말을 길게 써놔서 뭔소린가 싶을 수도 있지만 결국 해석해보면 간단합니다.

주어진 수 의 오른쪽 자리 -> 십의 자리

주어진 수의 각 자리의 합의 오른쪽 자리 -> 일의 자리

 

그럼 while 문을 이용해서 코드를 짜면 이렇게 되겠군요.

 

#include <stdio.h>

int main()
{
	int N = 0, tmp = 0, newnum = 0, prev = 0, cnt = 0;
	scanf("%d", &N);
	prev = N;
	while (N != newnum || cnt == 0) // 0이 입력될 때를 대비
	{
		tmp = (prev / 10) + (prev % 10); // 각 자릿수 더하기
		newnum = (prev % 10) * 10 + (tmp % 10); // 이어 붙이기
		prev = newnum; // 이전 수 갱신
		cnt++;
	}
	printf("%d", cnt);
	return 0;
}

 

 

while 문에 cnt == 0 을 추가한 이유는, 0이 입력되면 while 문이 돌지 않아서 0을 출력해버립니다.

그래서 추가했습니다.

 

감사합니다.