Hello Kitty Eyes Shut
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’» μ½”ν…Œ/πŸ“Œ C

[λ°±μ€€][Cμ–Έμ–΄] #1110 λ”ν•˜κΈ° 사이클

λ°˜μ‘ν˜•

μ•ˆλ…•ν•˜μ„Έμš”, μ½”λ”©ν•˜λŠ” μ†Œμ—°μž…λ‹ˆλ‹€ !πŸ₯°

이번 글은 λ°±μ€€ 1110번 λ”ν•˜κΈ° 사이클 문제λ₯Ό Cμ–Έμ–΄λ‘œ ν‘Ό 것에 λŒ€ν•œ κΈ°λ‘μž…λ‹ˆλ‹€.

 

사진을 ν΄λ¦­ν•˜λ©΄ 문제λ₯Ό λ³Ό 수 μžˆμ–΄μš” !

 

1. 문제

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

 

2. μ†ŒμŠ€ μ½”λ“œ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int n, init, count = 0;
    	int a, b, c, d;
    
	scanf("%d", &n);
	init = n;
    
	do {
		a = n / 10;
		b = n % 10;
		c = (a + b) / 10;
		d = (a + b) % 10;
		n = b * 10 + d;
		count++;
	} while (n != init);

	printf("%d", count);
	
	return 0;
}

 

3. 풀이

μš°λ¦¬λŠ” 0보닀 크고 99보닀 μž‘κ±°λ‚˜ 같은 μ •μˆ˜μΈ n의 사이클 길이λ₯Ό κ΅¬ν•˜κ³ μž ν•˜λŠ” 것이기 λ•Œλ¬Έμ—

scanfλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ‘œλΆ€ν„° n을 μž…λ ₯λ°›μŠ΅λ‹ˆλ‹€.

 

λ‹€μŒμœΌλ‘œ μ›λž˜ μž…λ ₯λ°›μ•˜λ˜ 숫자인 n으둜 λŒμ•„μ™”λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄

initμ΄λΌλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ—¬ 처음 μž…λ ₯받은 n의 값을 μ €μž₯ν•΄λ‘‘λ‹ˆλ‹€.

 

n / 10을 ν•˜μ—¬ n의 μ‹­μ˜ 자리 수λ₯Ό ꡬ해주고, n % 10을 ν•˜μ—¬ n의 일의자리 수λ₯Ό κ΅¬ν•΄μ€λ‹ˆλ‹€.

μœ„μ˜ μ†ŒμŠ€μ½”λ“œμ—μ„œλŠ” aκ°€ μž…λ ₯받은 수의 μ‹­μ˜ 자리 수, bκ°€ 일의 자리 수λ₯Ό μ €μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

그리고 각 자리 수λ₯Ό λ”ν•˜μ—¬ λ‚˜μ˜¨ 수의 μ‹­μ˜ 자리 μˆ˜μ™€ 일의 자리 수λ₯Ό λ‹€μ‹œ κ΅¬ν•΄μ€λ‹ˆλ‹€.

(a + b) / 10을 ν•˜λ©΄ n의 각 자리 수λ₯Ό λ”ν•˜μ—¬ λ‚˜μ˜¨ 수의 μ‹­μ˜ 자리 수λ₯Ό ꡬ할 수 있고,

(a + b) % 10을 ν•˜λ©΄ n의 각 자리 수λ₯Ό λ”ν•˜μ—¬ λ‚˜μ˜¨ 수의 일의 자리 수λ₯Ό ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ†ŒμŠ€μ½”λ“œμ—μ„œλŠ” cκ°€ n의 각 자리 수λ₯Ό λ”ν•˜μ—¬ λ‚˜μ˜¨ 수의 μ‹­μ˜ 자리 수, dκ°€ 일의 자리 수λ₯Ό μ €μž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ μƒˆλ‘œμš΄ μˆ˜λŠ” μž…λ ₯받은 수 n의 κ°€μž₯ 였λ₯Έμͺ½ 자리 μˆ˜μ™€ n의 각 자리 자릿수λ₯Ό λ”ν•˜μ—¬ λ‚˜μ˜¨ 수의 κ°€μž₯ 였λ₯Έμͺ½ 자리 수λ₯Ό 이어뢙인 κ²ƒμ΄λ―€λ‘œ μ‹­μ˜ μžλ¦¬κ°€ b, 일의 μžλ¦¬κ°€ d인 μˆ˜κ°€ 되겠죠?

μ΄λŠ” b * 10 + dλ₯Ό κ³„μ‚°ν•˜μ—¬ ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ κ΅¬ν•œ μƒˆλ‘œμš΄ 수λ₯Ό λ‹€μ‹œ n에 μ €μž₯ν•˜μ—¬ μ•žμ—μ„œ μ§„ν–‰ν•œ 단계듀을 λ°˜λ³΅ν•©λ‹ˆλ‹€.

 

μš°λ¦¬λŠ” 이 과정을 λ°˜λ³΅ν•˜λ©° μƒˆλ‘œμš΄ μˆ˜κ°€ μš°λ¦¬κ°€ 처음 μž…λ ₯ λ°›μ•˜λ˜ nκ³Ό κ°™μ•„μ§€λŠ” μ‚¬μ΄ν΄μ˜ 길이λ₯Ό μ•Œκ³  싢은 κ²ƒμ΄λ―€λ‘œ

while문을 톡해 nκ³Ό init이 κ°™μ•„μ§ˆ λ•ŒκΉŒμ§€ κ³„μ†ν•΄μ„œ μ•žμ˜ 과정을 λ°˜λ³΅ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

 

μ΄λ•Œ while문을 ν•œ 번 돌 λ•Œλ§ˆλ‹€ count의 값을 1μ”© 증가해주면 총 λͺ‡ 번 사이클을 λŒμ•˜λŠ”μ§€ 확인할 수 있겠죠?

 

μ΄λŸ¬ν•œ 과정을 λ°˜λ³΅ν•˜λ‹€κ°€ κ³„μ†ν•΄μ„œ n에 μ €μž₯되고 μžˆλŠ” μƒˆλ‘œμš΄ μˆ˜κ°€ μ²˜μŒμ— μž…λ ₯λ°›μ•˜λ˜ n의 값을 μ €μž₯ν•΄λ‘” initκ³Ό κ°™μ•„μ§€λ©΄ while문을 λΉ μ Έλ‚˜μ˜€κ²Œ 되고, μ΄λ•Œμ˜ count의 값이 μ‚¬μ΄ν΄μ˜ 길이가 λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ°˜μ‘ν˜•

'πŸ’» μ½”ν…Œ > πŸ“Œ C' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€][Cμ–Έμ–΄] #10815 숫자 μΉ΄λ“œ  (0) 2022.07.12