c언어 백준 - 1110: 더하기 사이클

박경현·2023년 6월 27일
0

문제 파악하기!!

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

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

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

풀이 과정!

문제를 하나하나 뜯어서 살펴보자!

  1. N ( 0 <= N <= 99) 을 입력받는다.

간단하다! cin을 이용하여 정수 N을 입력받는다.

  1. N의 각 자리의 숫자를 더한다.
    각 자리 수를 더 하려면 /와 % 연산자를 이용한다.
    10의 자리 수는 /로 1의 자리 수는 %로 하면 된다.

N = N / 10 + N % 10 //❶
3. N의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙여 새로운 수를 만든다.

① N의 가장 오른쪽 자리 수
➡ 1의 자리 수이므로 %로 구할 수 있다.

N % 10
② 앞에서 구한 합의 가장 오른쪽 자리 수
➡ 합이 두 자리 수가 되면 가장 오른쪽 자리를 구해야 한다. 마찬가지로, %이용한다.

(N / 10 + N % 10) % 10 //앞에 구한 합의 오른쪽 수
③ 이 둘(①,②)을 이어 붙여 새로운 수를 만든다.
➡ 두 수를 더한다. 더할 때, 10의 자리 수에는 10을 곱한다. 10의 자리 수는 ①(N의 가장 오른쪽 자리 수)이다.

N = (N % 10) * 10 + (N / 10 + N % 10) % 10
// ① + ②
4. 2~3번 과정을 반복하고 새로운 수가 원래 수로 돌아오는 사이클의 수를 구한다.
➡ 몇 번 반복 하는지 모르니 while문을 사용한다.
➡ 반복을 수행할 때마다 1씩 더해지는 변수가 필요하다. 이 변수는 선언할 때 0으로 초기화해야 한다.

이때, 원래 수와 새로운 수가 같은지 비교를 해야 while문을 종료할 수 있다. 따라서 초기에 원래 수(N)을 다른 변수에 저장해둔다. 이 후, if문을 이용하여 같은지 확인 후, 반복문을 종료한다.

1110 번 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int input_N; //주어지는 N의 값 
	int i = 1; // 사이클의 길이
	int NEW; // 새로 만들어지는 수 
	int a; //좌변의 우측 숫자
	int b; // 좌변의 좌측 숫자

	scanf("%d", &input_N); //input이 26인 경우
	a = input_N / 10;// 좌변의 왼쪽 수 대입 식 2
	b = input_N % 10; // 좌변의 오른쪽 수 대입 식 6
	NEW = a + b; // 8

	while (i) {
		a = b;// b = 6
		b = NEW % 10; //8
		NEW = a + b; // 우변의 값   NEW =8 ,14 , 12 ,6 
		printf("i = %d\n", i);
		++i;
		if (input_N == (10 * a + b)) {
			break;
		}
	}
	return 0;
}

실행결과!!

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글