문제출처 : 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

+ Recent posts