[Baekjoon] 1110번 더하기 사이클

Hyeona·2021년 7월 8일
1

📗 Baekjoon

목록 보기
5/14
post-thumbnail

📣
Baekjoon에서 PASS된 코드만 업데이트합니다.
알고리즘을 먼저 풀이하는 언어(Java)가 정해져있어,
풀이 언어(Python, C++, Java)가 모두 업데이트될 때까지는 시간이 걸릴 수 있습니다.

문제 제시


문제

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

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.



문제 풀이


현재의 십의 자리 수와 일의 자리 수를 분리하여, 이를 합하여 새로운 수를 만들어줍니다.
이때 중요한게 현재의 일의 자리는 다음 수의 십의 자리가 되고 새로운 수의 일의 자리는 다음 수의 일의 자리가 됩니다.
말장난 같긴 하지만, 각 규칙을 찾아 정리하면 위 그림과 같이 정리할 수 있습니다.
이를 코드와 하는 것이 해당 문제의 풀이 방법입니다.



문제 코드


Python

num = int(input(""))
temp = num
cnt = 0

while True :
    num1 = temp // 10
    num2 = temp % 10

    temp = (num2 * 10) + ((num1 + num2) % 10)
    cnt += 1

    if temp == num :
        break

print(cnt)

C++

#include <iostream>
using namespace std;

int main() {
	int start, end, temp, n, cnt = 0;

	cin >> n;
	temp = n;

	while (true) {

		start = temp / 10;
		end = temp % 10;

		temp = (end * 10) + ((start + end) % 10);
		cnt++;

		if (temp == n)
			break;
	}

	cout << cnt;
}

Java

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int num = Integer.parseInt(br.readLine());
		int count = 0, temp = num;

		while (true) {
			int num1 = temp / 10;
			int num2 = temp % 10;

			temp = (num2 * 10) + ((num1 + num2) % 10);
			count++;

			if (temp == num)
				break;
		}

		System.out.println(count);
	}

}



제출 결과


profile
✍🏻 뭐든 배우면 다 자산이 되겠죠!

0개의 댓글