본문 바로가기
코딩/백준

[C언어] 백준 BOJ 1110 더하기 사이클 - 김두루미

by 김두루미 2022. 7. 20.
반응형

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

문제 설명

백준의 문제 - 단계별로 풀어보기의 [반복문] 의 1110 더하기 사이클문제입니다.

 

일정한 공식에 따라 계산을 하였을 때, 처음 입력 받은 숫자로 몇 번만에 되돌아 가는지 횟수를 구하는 문제입니다.

 

숫자를 n으로 하였을 때,
1. n의 1의 자리를 새로운 숫자의 10의 자리로 변경
2. n의 1의 자리 숫자 + n의 10의 자리 숫자가 새로운 숫자의 1의 자리로 변경
(단, 더한 값이 십의 자리인 경우 1의 자리 숫자를 사용한다.)

이전 곱셈 문제처럼 자리 수를 구할 때는 나머지 연산자(%)와 나누기 연산자(/)를 활용하였습니다.

1. ten = temp % 10 * 10;
2.
one = temp / 10 + temp % 10;
if(one >= 10)
{
        one = one % 10;
}

 

 

코드 (C언어)
#include<stdio.h>

int main(void)
{
	int count = 1, n, temp, ten, one;
	
	scanf("%d", &n);
	temp = n;
	
	while(1)
	{
		ten = temp % 10 * 10;
		one = temp / 10 + temp % 10;
		if(one >= 10)
		{
			one = one % 10;
		}
		
		temp = ten + one;
		
		if(n == temp)
		{
			break;
		}
		else
		{
			count++;
		} 
	}
	
	printf("%d", count);
	
	return 0;
}
if문으로 one을 검사하는 부분을 조건연산자로 대체하여, one, ten 변수 없이 구현할 수 있습니다.
#include<stdio.h>

int main(void)
{
	int count = 1, n, temp;
	
	scanf("%d", &n);
	temp = n;
	
	while(1)
	{
		temp = (temp % 10 * 10) + ((temp / 10 + temp % 10) >= 10 ? (temp / 10 + temp % 10) % 10 : (temp / 10 + temp % 10));	
		
		if(n == temp)
		{
			break;
		}
		else
		{
			count++;
		} 
	}
	
	printf("%d", count);
	
	return 0;
}
 

 

반응형