백준 1110번

신형석·2022년 3월 11일
0

알고리즘 풀이

목록 보기
16/41

백준 1110번은 특이한 연산법을 거쳐서 원래의 수가 다시 원래대로 돌아오는 사이클을 조사하는 프로그램을 짜는 문제이다.

특이한 연산법이란 다음과 같다:

  1. 수가 10보다 작은 경우, 앞에 0을 붙여 두 자리수로 만들고, 각 자리 수를 더한다.
  2. 주어진 수의 가장 오른쪽 자리 수와 1번의 합의 가장 오른쪽 자리 수를 이어붙이면 새로운 수가 나온다.
  3. 만약 이 수가 원래의 수와 같다면 종료, 그렇지 않으면 일련의 과정을 다시 반복

이다.

이 과정을 코드로 바꾸면 다음과 같다:

#include <stdio.h>

int main(void) {
	int num;
	scanf("%d", &num);
	int x, y; //변수 x는 10의 자리, y는 1의 자리
	int i = 0;
	int origin = num; //맨 처음 숫자를 저장해놓음
	for (;;) {
		i++;
		if (num < 10) { //10보다 작으면 x는 0, y는 그대로
			x = 0;
			y = num;
		}
		else { //아니라면 몫과 나머지를 구해서 저장
			x = num / 10;
			y = num % 10;
		}
		int new_num = x + y;
		num = (y * 10) + (new_num % 10); 
		if (num == origin) { //연산 후 맞는지 비교
			break;
		}
	}
	printf("%d", i);
	return 0;
}

0개의 댓글