[백준 1699][파이썬] 제곱수의 합

2023. 1. 14. 12:00·백준 알고리즘/dp
728x90

https://www.acmicpc.net/problem/1699

 

1699번: 제곱수의 합

어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다

www.acmicpc.net

 

일단 dp[i]의 값을 i를 제곱수들의 합으로 표현할 때 최소 개수로 정한다.

 

그렇게 되면 dp[i]의 값은

 

dp[1] + dp[i-1]

dp[2] + dp[i-2]

dp[3] + dp[i-3]

.

.

.

 

위 값들 중 가장 작은 값이 된다.

 

처음엔 위 방식으로 이중 반복문을 돌려서 답을 구했으나 시간 초과가 발생했다.

 

시간을 더 줄일 수 있는 알고리즘을 사용해야한다.

 

먼저 항의 개수가 최소가 되는 조건을 찾아야한다.

 

1, 4, 9 같은 제곱수의 경우 무조건 최소 항의 개수가 1이다.

 

그러므로 dp[i]의 값을 구할 때

 

dp[1] + dp[i-1]

dp[4] + dp[i-4]

dp[9] + dp[i-9]

.

.

.

 

위와 같이 제곱으로 건너뛰면 더욱 빠르게 구할 수 있다.

n = int(input())
dp = [1e9]*(n+1)
dp[1]=1
sq=[1]
for i in range(2, n+1):
    if int(i**0.5)**2==i:
        sq.append(i)
        dp[i]=1
    else:
        for j in sq:
            dp[i]=min(dp[i],dp[j]+dp[i-j])
print(dp[n])
728x90

'백준 알고리즘 > dp' 카테고리의 다른 글

[백준 11066][파이썬] 파일 합치기 (dp 알고리즘)  (0) 2023.03.15
[백준 2839][파이썬] 설탕 배달  (0) 2023.01.23
[백준 1912][파이썬] 연속 합  (0) 2023.01.13
[백준 11055, 11722, 11054][파이썬] 증가, 감소하는 수열 dp 문제  (0) 2023.01.11
[백준][파이썬] 쉬운 계단 수 10844  (0) 2023.01.09
'백준 알고리즘/dp' 카테고리의 다른 글
  • [백준 11066][파이썬] 파일 합치기 (dp 알고리즘)
  • [백준 2839][파이썬] 설탕 배달
  • [백준 1912][파이썬] 연속 합
  • [백준 11055, 11722, 11054][파이썬] 증가, 감소하는 수열 dp 문제
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    code tree
    binary search
    ChatPromptTemplate
    ci/cd
    RNN
    openvidu 배포
    influxDB CLI
    parametric search
    스프링 OAuth2
    스택
    nn.RNN
    파이썬
    bfs
    다익스트라
    AWS Lambda
    Vector Store
    embedding
    codetree
    푸쉬 알람
    Merge
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[백준 1699][파이썬] 제곱수의 합
상단으로

티스토리툴바