1 minute read

원래 수로 돌아올 때까지 연산을 반복하는 문제

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

FLOW :

  1. n의 사이클의 길이 -> for문 사용, i+1 = n의 사이클 길이
  2. Scanner클래스로 입력값 사용
  3. 입력값이 0일 경우 1사이클에 종료 -> 따로 if문 사용
  4. /,% 사용으로 새로운 수 계산로직 생성
  5. 계산 flow -> (주석) 명확한 설명은 추후 업데이트 예정🥱
import java.util.Scanner;

public class Main {
    public static void main(String args[]){
        
        Scanner scan = new Scanner(System.in);
       
        int number = 0;
        int sum1 = scan.nextInt(); //26

        if(sum1==0) {
        	System.out.println(1);
        }        
        int number2 = sum1;
       
        if(sum1!=number){
        	for(int i=0; i<i+1; i++) {
                int a = sum1/10; //2, 6, 8, 4
                int b = sum1%10; //6, 8, 4, 2
                int c = b * 10; //60, 80, 40, 20
                
        		sum1 = a + b; //8, 14, 12, 6
                
        		if(sum1>=10) {
        			sum1 = sum1%10; //4, 2
        			number = c + sum1; //84, 42 
        			sum1 = number; 
        		} else if (sum1<10) { 
        		number = c + sum1; //60 + 8, 20 + 6
        		sum1 = number; //68 , 26
        		}
        		
        		if (sum1==number2) {
        			System.out.println(i+1);
        			break;
            }    
        }
      }
   }
}

Leave a comment