코딩/백준

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

rivermoon 2022. 10. 2. 14:39

 

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

지금까지의 문제보다 조금 더 복잡한 생각을 필요로 합니다. 문제를 잘 읽어보세요.

 

해결 방법

몇 번 사이클을 돌았는지 저장할 변수 cnt, 숫자를 입력받을 num, 원래의 숫자를 기억할 origin 변수를 만들었습니다.

백준 페이지의 예시에 나와있는 숫자 26을 예로 들어 설명하자면,

 

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

 

26에서 십의자리 숫자를 구해야 합니다. 그러기 위해 26을 10으로 나눈 몪으로 구하였습니다. (아래 코드에서의 변수 a)

26에서 일의자리 숫자를 구하는 것은 26을 10으로 나눈 나머지로 구하였습니다. (아래 코드에서의 변수 b)

 

각각의 자릿수 a, b를 더한 값의 일의 자리를 구하기 위해서 (a + b)를 10으로 나눈 나머지로 구하였습니다. (아래 코드의 c)

(2 + 6 = 8, 8 % 10 = 8)

(6 + 8 = 14, 14 % 10 = 4)

 

그리고 일의자리 숫자 b를 새로운 수의 십의 자리 숫자로, 자릿수를 더한 값의 일의 자리 c를 새로운 수의 일의 자리 숫자로 지정하여 만든 "새로운 수"  d를 num 변수에 저장하였습니다.

 

그리고 이로써 사이클이 한 번 돌았기 때문에, 사이클의 횟수를 저장하는 변수인 cnt를 1 올려줍니다.

만약 새로운 수와 원래의 수가 같다면, 사이클을 종료시킵니다.

그 다음 사이클 횟수를 출력하면 됩니다.

 

 

 

코드

#include <stdio.h>

int main(){
	int num, origin, cnt = 0; /* 변수를 0으로 초기화 하는 것을 잊지 맙시다. */
	scanf("%d", &num);
	origin = num;
		
	int a,b,c,d;
	
	while (1){
		a = num / 10;
		b = num % 10;
		c = (a + b) % 10;
		d = (b * 10)+ c;
		num = d;
		cnt++;
		if (num == origin) break;
	}
	printf("%d", cnt);
}

'코딩 > 백준' 카테고리의 다른 글

[백준][C] 2562. 최댓값  (0) 2022.10.02
[백준][C] 10818. 최소, 최대  (0) 2022.10.02
[백준][C] 10951. A + B - 4  (0) 2022.10.02
[백준][C] 10952. A + B - 5  (0) 2022.10.02
[백준][C] 10871. X보다 작은 수  (0) 2022.10.02