티스토리 뷰

반응형

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

 

 

문제

 

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의 사이클 길이를 출력한다.

 

 

풀이

 

 N이 10보다 작을 때 처리만 잘 해주면 쉽게 풀 수 있는 문제입니다. 처음 문제를 보면 N이 10보다 작을 때 어떻게 하라는건가 싶은데 주어진 수가 한자리 숫자일 땐 문제에서 주어진 연산을 할 수 없기 때문에

 N = 2일 때, 0 + 2 = 2 형태로 새로운 숫자에 사용할 오른쪽 숫자를 구한 다음 여기에 주어진 N의 오른쪽 숫자인 2를 이어 붙여 22로 만들어서 연산하시면 됩니다. 

 즉 N < 10 일 땐 새로운 수 = N * 10 + N 이 되는 것입니다. 이렇게 구한 두자리 숫자를 가지고 문제에서 주어진 연산을 수행하면 됩니다. 

 

 

코드

 

import java.util.*;

public class Main {

	public static void main(String[] args) {

		Scanner s = new Scanner(System.in);
		
		int N = s.nextInt();
		
		int newNum = N;
		int answer = 0;
		
		do 
		{
			if (10 > newNum)
			{
				newNum = newNum * 10 + newNum;
				answer++;
			}
			else 
			{
				int first = newNum / 10; // 앞자리
				int second = newNum % 10; // 뒷자리
				
				int tmp = first + second; // 앞자리와 뒷자리를 더해서 새로 만들어진 수
				int secondOfNewNum = newNum % 10; // 현재 새로운 숫자의 뒷자리
				
				// 새로운 숫자 갱신
				newNum = (secondOfNewNum * 10) + (tmp % 10);
				
				answer++;
			}
		}
		while (newNum != N);
		
		System.out.println(answer);

	}

}

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함