알고리즘

[백준/Java]Q1110

  • -
반응형

백준 알고리즘 4단계 while문 1110번 문제입니다.


Q. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
[입력]
- 정수 N이 주어진다.

[조건]
- N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
- 정수가 주어질 때 다음과 같은 연산을 할 수 있다.
- 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그리고 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙여 새로운 수를 만든다. 반복 과정을 통해 최초 N이 되는 사이클을 구한다.
  Ex) 26 => 2+6=8(0+8) : 1
           => 6+8=14   : 2
           => 8+4=12   : 3
           => 4+2=6(0+6) : 4(END)
           => 2+6=8(0+8) : 원점

앞에서 해오던 문제와 달리 생각 정리가 좀 필요했고 정리한 알고리즘은 다음과 같았다.

 

1. 각 자릿수를 먼저 구한다.

2. 각 자릿수의 합을 구한다.

3. 합이 10보다 작을 경우 "0"을 붙여주기 위해 이 때 결과는 문자열에 담는다.

4. 합의 오른쪽 자릿수만을 구한다.

5. 다시 1.에서 구한 오른쪽 자릿수와 2.에서 구한 합의 오른쪽 자릿수의 합을 구한다.

6. 5.에서 구한 합과 최초 입력한 값이 맞다면 while문을 벗어나도록 하고, 아니라면 5.에서 구한 합을 특정 변수에 담고 사이클값을 1증가 시키고 다시 루프를 돈다.

 

풀이
package com.baek.algo;

import java.util.Scanner;

public class Q1110 {

	public static void main(String[] args) {		
		Scanner sc = new Scanner(System.in);

		int num   = sc.nextInt();
		int start = num;
		int cycle = 1;

		sc.close();

		while(true) {
			String sumTxt = "";

			int lNum = start / 10;
			int rNum = start % 10;
			int sum  = lNum + rNum;

			if(sum < 10) {
				sumTxt = "0" + Integer.toString(sum);
			} else {
				sumTxt = Integer.toString(sum);
			}

			int rSum = Integer.parseInt(sumTxt) % 10;

			String newNum = Integer.toString(rNum) + Integer.toString(rSum);

			if(num == Integer.parseInt(newNum)) {
				break;
			}

			start = Integer.parseInt(newNum);
			cycle = cycle + 1;
		}
		System.out.println(cycle);
	}
}
반응형

'알고리즘' 카테고리의 다른 글

[백준/Java]Q1065  (0) 2021.07.08
[백준/Java]Q4344  (0) 2021.07.08
[백준/Java]Q10871  (0) 2021.07.06
[백준/Java]Q2884  (0) 2021.07.05
[백준/Java]Q2588  (0) 2021.07.05
Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.