μ΅œλŒ€ 1 λΆ„ μ†Œμš”

πŸ“ [S4_17626] Four Squares

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());

		int[] dp = new int[n+1];

		// 0을 제곱의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Έ 개수 ( 0 )
		dp[0] = 0;
		// 1을 제곱의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Έ 개수 ( 1 * 1 )
		dp[1] = 1;

		for(int i=2; i<=n; i++) {
			int min = Integer.MAX_VALUE;
			for(int j=1; j*j<=i; j++) {
				// μ΅œμ†Œκ°’μ„ κ΅¬ν•œλ‹€
				min = Math.min(min, dp[i-(j*j)]);
			}
			// μ΅œμ†Œκ°’μ— 1을 더해쀀닀
			dp[i] = min+1;
		}
		// 좜λ ₯
		System.out.println(dp[n]);
	}
}

πŸ€” λ‚˜μ˜ 생각

μ²˜μŒμ— κ·Έλ¦¬λ””ν•˜κ²Œ 전체λ₯Ό λ‹€ λŒλ©΄μ„œ κ°€μž₯ 큰 μˆ˜λΆ€ν„° λΉΌμ£Όλ©΄μ„œ κ΅¬ν•˜λ €κ³  ν–ˆλ‹€.
근데 κ΅¬ν•˜λ‹€ λ³΄λ‹ˆ λͺ¨λ“  μˆ˜κ°€ 큰 μˆ˜λΆ€ν„° λΊ€λ‹€κ³  μ΅œμ†Œμ˜ κ°œμˆ˜κ°€ λ˜λŠ” 게 μ•„λ‹ˆλΌλŠ” 것을 μ•Œκ³  λ°©ν–₯을 λ°”κΏ¨λ‹€.
dp둜 ν’€μ—ˆλŠ”λ° μ²˜μŒλΆ€ν„° λ‚˜μ—΄ν•΄λ³΄λ‹ˆ κ·œμΉ™μ„ 찾을 수 μžˆμ—ˆλ‹€.



이 과정을 톡해 값을 κ΅¬ν•΄λ‚˜κ°€λ©΄ λœλ‹€ !!
dp[i] = dp[ i - ( i 제곱근 보닀 μž‘κ±°λ‚˜ 같은 κ°’ 의 제곱 ) ] κ°’λ“€ 쀑 μ΅œμ†Œκ°’μ— +1 을 ν•΄μ£Όλ©΄ λœλ‹€