01-09 18:44
Recent Posts
Recent Comments
관리 메뉴

miinsun

[BAEKJOON] λ°±μ€€ κ·Έλž˜ν”„ 2331 :: λ°˜λ³΅μˆ˜μ—΄ λ³Έλ¬Έ

Algorithm/Baekjoon

[BAEKJOON] λ°±μ€€ κ·Έλž˜ν”„ 2331 :: λ°˜λ³΅μˆ˜μ—΄

miinsun 2022. 3. 31. 23:04

 

πŸ’¬  문제 μ„€λͺ…

λ‹€μŒκ³Ό 같이 μ •μ˜λœ μˆ˜μ—΄μ΄ μžˆλ‹€.

* D[1] = A
* D[n] = D[n-1]의 각 자리의 숫자λ₯Ό P번 κ³±ν•œ μˆ˜λ“€μ˜ ν•©

예λ₯Ό λ“€μ–΄ A=57, P=2일 λ•Œ,
μˆ˜μ—΄ DλŠ” [57, 74(=52+72=25+49), 65, 61, 37, 58, 89, 145, 42, 20, 4, 16, 37, …]이 λœλ‹€.
κ·Έ λ’€μ—λŠ” μ•žμ„œ λ‚˜μ˜¨ μˆ˜λ“€(57λΆ€ν„°κ°€ μ•„λ‹ˆλΌ 58λΆ€ν„°)이 λ°˜λ³΅λœλ‹€.

이와 같은 μˆ˜μ—΄μ„ 계속 κ΅¬ν•˜λ‹€ 보면 μ–Έμ  κ°€ 이와 같은 λ°˜λ³΅μˆ˜μ—΄μ΄ λœλ‹€.
μ΄λ•Œ, λ°˜λ³΅λ˜λŠ” 뢀뢄을 μ œμ™Έν–ˆμ„ λ•Œ, μˆ˜μ—΄μ— λ‚¨κ²Œ λ˜λŠ” μˆ˜λ“€μ˜ 개수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μœ„μ˜ μ˜ˆμ—μ„œλŠ” [57, 74, 65, 61]의 λ„€ 개의 μˆ˜κ°€ λ‚¨κ²Œ λœλ‹€.

 

πŸ”¨  μž…μΆœλ ₯ 예

μž…λ ₯ 

  • 첫째 쀄에 A(1 ≤ A ≤ 9999), P(1 ≤ P ≤ 5)κ°€ 주어진닀.

     

좜λ ₯

  • 첫째 쀄에 λ°˜λ³΅λ˜λŠ” 뢀뢄을 μ œμ™Έν–ˆμ„ λ•Œ, μˆ˜μ—΄μ— λ‚¨κ²Œ λ˜λŠ” μˆ˜λ“€μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯ 1)

57 2

 

예제 좜λ ₯ 1)

4

 

✨  Idea

 DFS μŠ€νƒμ²˜λŸΌ μ΄μš©ν•œλ‹€.

μœ„μ™€ 같이 37처럼 κ²ΉμΉ˜λŠ” 뢀뢄이 μžˆμ„ λ•Œ, answer = list.indexOf(37)

​

πŸ’»  Main.java

/* λ°±μ€€ κ·Έλž˜ν”„ - 2331 :: λ°˜λ³΅μˆ˜μ—΄ */
import java.util.*;

public class Main {
	static int answer = 0;
	static ArrayList<Integer> list = new ArrayList<>();
	
	static void DFS(String A, int P) {
		// D[n-1]의 각 자리의 숫자λ₯Ό p번 κ³±ν•œ μˆ˜λ“€μ˜ ν•© κ΅¬ν•˜κΈ°
		int total = 0;
		for(char c : A.toCharArray()) {
			int tmp = 1;
			for(int i = 0; i < P; i++) {
				tmp *=  c - '0';
			}
			total += tmp;
		}
		
		// 반볡 μˆ˜μ—΄μ„ λ°œκ²¬ν•˜λ©΄
		if(list.contains(total)) {
			// 반볡 μˆ˜μ—΄μ˜ 처음 인덱슀 κ°’ 리턴
			answer = list.indexOf(total);
		}
		else {
			list.add(total);
			DFS(String.valueOf(total), P);
		}
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		String A = sc.next();
		int P = sc.nextInt();
		
		list.add(Integer.parseInt(A));
		DFS(A, P);
		System.out.println(answer);
		sc.close();
	}
}
Comments