티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 1110번 더하기 사이클
https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

0보다 크거나 같고 99보다 작거나 같은 정수 N을 입력받음
두 자리 수의 각 자리 수를 더해서 새로운 수를 만듬 (한 자리 일 경우 앞에 0이 있다고 보고 0과 더함)
원래 수의 일의 자리와 새로운 수의 일의 자리 수를 이어 붙여서 새로운 두 자리 수를 만듬

예를 들어 원래 수가 68이면 각 자리 수를 더해서 새로운 수는 14
원래 수의 일의 자리 8과 새로운 수의 일의 자리 4를 붙여서 84가 됨
이 연산을 반복하여 최초 수가 될 때까지의 횟수(사이클)를 출력

 

2. 풀이

문제 설명이 복잡한데 생각해보면 간단한 연산입니다.
원래 수(더하기 전)의 일의 자리와 새로운 수(더하기 후)의 일의 자리를 이어 붙이면 됩니다.
다시 말하면, 더하기 전, 후 숫자의 일의 자리만 이어 붙이면 됩니다.

정리하면,
1) 각 자리 수를 더한다.
2) 연산 전 후의 일의 자리를 이어 붙인다.
입니다.

이런 규칙만 이해하시면 코드 부분은 이해하는데 어려움이 없을겁니다.
예시를 보면 입력이 0인 경우 출력이 1이기 때문에 반드시 1번은 수행해야 한다고 보고, do~while 문을 사용하였습니다.
* do~while 은 while과 다르게 안쪽 문장을 우선 실행하고, 이후에 조건을 비교합니다.

 

3. 코드

#include <stdio.h>

int main() {
	int input;
	scanf("%d", &input);

	int cnt = 0;
	int n = input;
	
	do {
		n = (n % 10) * 10 + (n / 10 + n % 10) % 10;
		++cnt;
	} while (n != input);

	printf("%d\n", cnt);
	return 0;
}
728x90
반응형
댓글