https://www.acmicpc.net/problem/1699
문제에 대한 설명부터 하겠다.
숌크라테스는뭐여
쨋든
자연수 n에 대해서는 제곱수들의 합으로 나타낼 수 있다고 한다.
예시의 숫자들과 같이 11은 = 3^2 + 1^2 + 1^2인데
뭐 최악의 경우는 1의제곱으로만 이루어져있을수도 있고
쨋든!
문제의 흐름이 뭔가...
뭔가....
뭔가!!!!!
dp문제 1로 만들기하고 유사한거같은데..나만그래?
https://lee-soo.tistory.com/13
[동적프로그래밍] 백준 1463번 1로 만들기(C++)
https://www.acmicpc.net/problem/1463 오우 1로 만들기 문제! 문제는 정말 간단하다 3으로 나누거나 2로나누거나 1로빼서 정수 n을 1로 만들때, 몇번 연산을 진행했는지에 대해 최솟값을 출력하라고 하
lee-soo.tistory.com
어 어..?
여기서도 간과할 수 있는게, "가장 큰 제곱수로 나누고 남은값 그 다음 제곱수 or 1로 더하면 되는거 아님?"
이다.
예를들어 19에 대해서
가장 큰 제곱수가 뭐냐
16이고
그다음은?
1이네,,??
그럼 16 +1+1+1 =4가지야
근데 1+9+9로도 될 수 있다 이거야
아 그럼 이것도 dp인거같네...
아까와 같이 그러면
기본 값을 dp[i]=dp[i-1]+1로 해도 될것이다 (1의 제곱을 더한거잖아)
그다음에 dp[i]에 대해서 i의 제곱근보다 작은 값들에 대해서 값들 더해주면 되는거 아닌고?
짜잔~

사실 이 문제는 내가 처음으로 알고리즘 답 안보고 빠르게 답을 구했던 문제라 애정이 많이간다
사랑해 제곱수의 합 구하기야~~

'코딩 테스트 준비! (백준) > DP' 카테고리의 다른 글
[DP] 백준 1309번 동물원(C++) (0) | 2025.04.17 |
---|---|
[DP] 백준 11053번 가장 긴 증가하는 부분수열(C++) (0) | 2025.04.10 |
[동적프로그래밍] 백준 1463번 1로 만들기(C++) (0) | 2025.04.03 |
[동적프로그래밍] 백준 2225번 합분해(C++) (0) | 2025.04.01 |
[동적프로그래밍] 백준 17404번 rgb 거리 2(C++) (0) | 2025.03.31 |