πŸ“ μ•Œκ³ λ¦¬μ¦˜/기본문법

[λ°±μ€€] 4673번_μ…€ν”„λ„˜λ²„

점이 2021. 7. 24. 16:57
λ°˜μ‘ν˜•

문제 Silver 5 

μ…€ν”„ λ„˜λ²„λŠ” 1949λ…„ 인도 μˆ˜ν•™μž D.R. Kaprekarκ°€ 이름 λΆ™μ˜€λ‹€. μ–‘μ˜ μ •μˆ˜ n에 λŒ€ν•΄μ„œ d(n)을 nκ³Ό n의 각 자리수λ₯Ό λ”ν•˜λŠ” ν•¨μˆ˜λΌκ³  μ •μ˜ν•˜μž. 예λ₯Ό λ“€μ–΄, d(75) = 75+7+5 = 87이닀.

μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 수λ₯Ό μ‹œμž‘ν•΄μ„œ n, d(n), d(d(n)), d(d(d(n))), ...κ³Ό 같은 λ¬΄ν•œ μˆ˜μ—΄μ„ λ§Œλ“€ 수 μžˆλ‹€. 

예λ₯Ό λ“€μ–΄, 33으둜 μ‹œμž‘ν•œλ‹€λ©΄ λ‹€μŒ μˆ˜λŠ” 33 + 3 + 3 = 39이고, κ·Έ λ‹€μŒ μˆ˜λŠ” 39 + 3 + 9 = 51, λ‹€μŒ μˆ˜λŠ” 51 + 5 + 1 = 57이닀. μ΄λŸ°μ‹μœΌλ‘œ λ‹€μŒκ³Ό 같은 μˆ˜μ—΄μ„ λ§Œλ“€ 수 μžˆλ‹€.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 μƒμ„±μžλΌκ³  ν•œλ‹€. μœ„μ˜ μˆ˜μ—΄μ—μ„œ 33은 39의 μƒμ„±μžμ΄κ³ , 39λŠ” 51의 μƒμ„±μž, 51은 57의 μƒμ„±μžμ΄λ‹€. μƒμ„±μžκ°€ ν•œ κ°œλ³΄λ‹€ λ§Žμ€ κ²½μš°λ„ μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 101은 μƒμ„±μžκ°€ 2개(91κ³Ό 100) μžˆλ‹€. 

μƒμ„±μžκ°€ μ—†λŠ” 숫자λ₯Ό μ…€ν”„ λ„˜λ²„λΌκ³  ν•œλ‹€. 100보닀 μž‘μ€ μ…€ν”„ λ„˜λ²„λŠ” 총 13κ°œκ°€ μžˆλ‹€. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보닀 μž‘κ±°λ‚˜ 같은 μ…€ν”„ λ„˜λ²„λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

μž…λ ₯은 μ—†λ‹€.

좜λ ₯

10,000보닀 μž‘κ±°λ‚˜ 같은 μ…€ν”„ λ„˜λ²„λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯ν•œλ‹€.


public class Main{
	public static int[] arr = new int[10000];
	public static void main(String[] args) {
		for(int i =0 ; i < arr.length ; i++) {
			self_number(i+1);
		}
		for(int i= 0 ; i< arr.length-1 ; i++) {
			if(arr[i] == 0) System.out.println(i+1);
		}
	}
	
	public static void self_number(int n){
		int dn = n;
		while(n>0) {
			dn += n%10;
			n /= 10;
		}
		if(dn < 10000) {
			arr[dn-1] ++;
		}
	}
}

처음으둜 λ‚˜μ˜¨ Silverλ“±κΈ‰ 문제!

문제 읽고 μ΄ν•΄ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œλ„ λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ Έλ‹€ γ… ^γ… 

 

μš°μ„  μƒμ„±μžλ‘œ μ“°μ΄λŠ” 수λ₯Ό μ•Œ 수 μžˆλŠ” 배열인 arrλ₯Ό λ§Œλ“€κ³ , μƒμ„±μžλ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ self_number을 λ§Œλ“€μ—ˆλ‹€.

μ²˜μŒμ—λŠ” self_numberλ₯Ό μž¬κ·€λ‘œ ν•˜μ—¬, return self_number(dn)의 ν˜•μ‹μœΌλ‘œ κ°€μ„œ λΉ λ₯΄κ²Œ κ΅¬ν•˜λ € ν–ˆμœΌλ‚˜ StackOverFlow 였λ₯˜κ°€ 났닀...γ…Žγ…Žγ…Ž μž¬κ·€ν•¨μˆ˜κ°€ λλ‚˜μ§€ μ•Šμ•„μ„œ κ·ΈλŸ°κ±΄κ°€ μ™œ 이 μ—λŸ¬κ°€ λ‚¬λŠ”μ§€ μ •ν™•ν•˜κ²Œ μ•Œμ§€λŠ” λͺ»ν•˜κ² λ‹€..

μ•„λ¬΄νŠΌ mainμ—μ„œ arr.lengthκΉŒμ§€ self_numberν•¨μˆ˜λ₯Ό μ „λΆ€ μ‹€ν–‰ν•˜λŠ” λ°©λ²•μœΌλ‘œ 선택..

 

닡은 λ§žμ•˜μ§€λ§Œ ꡉμž₯히 λΉ„νš¨μœ¨μ μΈ μ½”λ“œλΌκ³  μƒκ°ν•œλ‹€.

μΆ”ν›„ λ¦¬νŒ©ν† λ§ ν•  ν•„μš”κ°€ μžˆμ„ 것 κ°™λ‹€!

λ°˜μ‘ν˜•