Algorithm/λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜

[λ°±μ€€ μ•Œκ³ λ¦¬μ¦˜] 1110번 - λ”ν•˜κΈ° 사이클

μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 1. 04:58
λ°˜μ‘ν˜•

4. whileλ¬Έ - λ”ν•˜κΈ° 사이클

 

 

문제) 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의 μ‚¬μ΄ν΄μ˜ 길이λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯ 좜λ ₯
26 4

 

μž…λ ₯ 좜λ ₯
55 3

 

μž…λ ₯ 좜λ ₯
1 60

 

import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();  // μ •μˆ˜ μž…λ ₯
		int num = n;  // μž…λ ₯받은 μ •μˆ˜λ₯Ό num에 λ‹΄κΈ°
		int cnt = 0;  // 사이클 길이

		do {
			num = (num % 10) * 10 + (num / 10 + num % 10) % 10;
			// 1. (num % 10) * 10 → μž…λ ₯ν•œ 숫자의 일의자리수λ₯Ό μ‹­μ˜ 자리수둜 λ§Œλ“€μ–΄μ€€λ‹€
			// 2. num / 10 + num % 10 → μž…λ ₯ν•œ 숫자의 μ‹­μ˜μžλ¦¬μˆ˜μ™€ 일의자리수λ₯Ό 각각 더해쀀닀
			// (num / 10 + num % 10) % 10 → λ”ν•œ κ°’μ˜ 일의자리수λ₯Ό μΆ”μΆœν•œλ‹€
			cnt++; // 사이클 길이 1 증가
		} while (n != num);  // μž…λ ₯ν•œ μ •μˆ˜μ™€ μ—…λ°μ΄νŠΈλ˜λŠ” numκ³Ό 같을 λ•ŒκΉŒμ§€ 반볡,
							 // κ°™μœΌλ©΄ do-whileλ¬Έ λΉ μ Έλ‚˜μ˜΄

		System.out.println(cnt);  // 사이클 길이 좜λ ₯
	}
}

 

식을 λ”°λ‘œλ”°λ‘œ λ–Όμ™€μ„œ 좜λ ₯ν•΄λ΄€μŒ. λ‚΄ λΈ”λ‘œκ·Έλ₯Ό λ³Ό λ‹€λ₯Έ 이듀을 μœ„ν•˜μ—¬..

λ°˜μ‘ν˜•