문제출처 : https://www.acmicpc.net/problem/1699
1. 문제요약
- 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있음
- 11 = 3^2 + 1^2 + 1^2(3개항)
11 = 2^2 + 2^2 + 1^2 + 1^2 + 1^2(5개항)
- 11의 최소 제곱수 항의 갯수는 3개
- 자연수 N의 최소 제곱수 항의 갯수는?
- 1 <= N <= 100,000
2. 접근방법
- 임의의 정수 N에서
1^2을 빼면 N-1
2^2을 빼면 N-4
...
- d[n] 을 n의 최소 제곱수 갯수 라고 하면
d[n] = min(d[0] + 1, d[1] + 1, d[2] + 1, d[3] + 1 ..., d[i <= j * j] + 1)
3. 시간복잡도
- 1 ~ 3 : 1 = 3
4 ~ 8 : 2 = 2 * 5
9 ~ 16 : 3 = 3 * 7
17 ~ 25 : 4 = 4 * 9
...
- ∑(k = 1, 300)(2k + 1) * k = 2∑(k = 1, 300)k^2 + ∑(k = 1, 300)k
4. 회고
- 처음에 무조건 임의의 자연수 n에 가까운 제곱수를 구하면 되는 줄 알았는데
- 12 = 3^2 + 1^2 + 1^2 + 1^2 = 4개항
12 = 2^2 + 2^2 + 2^2 = 3개항
※ 근데 맞은 소스랑 틀린 소스랑 차이가 없는데 왜 맞고 틀리지??????
채점 서버 문제였음..
소스코드 : 맞은 소스
소스 코드 : 틀린 소스 맞음
[출처 : BOJ, 문제에 대한 모든 권리는 BOJ(acmicpc.net, startlink)에 있음]
'먹고살려면 > boj' 카테고리의 다른 글
BOJ 2225 합분해 (0) | 2018.01.25 |
---|---|
BOJ 9461 파도반 수열 (0) | 2018.01.24 |
BOJ 2579 계단 오르기 (0) | 2018.01.22 |
BOJ 1912 연속합 (0) | 2018.01.21 |
BOJ 11054 가장 긴 바이토닉 부분 수열 (0) | 2018.01.20 |