일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 사이드
- 만화도
- 파비최
- 괜찮음
- 뭐든
- FIT XR
- 월간
- 매일
- English
- 잡생각
- 링피트
- 미드시청
- leetcode
- 프로젝트
- Writing
- 쓰릴오브파이트
- Daily Challenge
- 개발자
- 읽기
- 리얼 클래스
- 화상영어
- 영어원서읽기
- 스탭퍼
- 3줄정리
- 30분
- 10분
- realclass
- 운동
- Problem Solving
- 영어공부
Archives
- Today
- Total
파비의 매일매일 공부기록
BOJ 17626 - Four Squares #1 본문
최근에 풀었던 전형적인 DP 유형 중에 하나를 골라봤다.
비슷한 문제는 동전 문제가 있다.
이러한 유형의 풀이 전략은
가장 작은 수를 시작으로 개수를 만들고
점점 수를 증가하면서 최소 갯수를 구하는 식으로 누적하면 된다.
또한 각 제곱의 값은 배열(혹은 리스트)에 미리 계산해 놓으면 속도를 조금 더 빠르게 할 수 있다.
작성한 소스는 아래와 같다.
n = int(input())
dp = [i for i in range(50001)]
l = int(50000**0.5) + 1
s = [i*i for i in range(l+1)]
for j in range(2, l):
for i in range(s[j], n+1):
if i - s[j] < 0 :
break
dp[i] = min(dp[i-s[j]]+1, dp[i])
print(dp[n])
그런데 시간초과가 난다..
시간 복잡도의 최대는 50000 * (50000**0.5) = 11180 k라서 1억 개까지는 안돼서 괜찮을 거 같은데..
python 자체에 list 접근 시간이 오래걸리는건가..?
다른 방법을 찾아봐야 할 듯싶다.
일단 오늘은 여기까지.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
BOJ 15489 - 파스칼 삼각형 (0) | 2021.05.15 |
---|---|
BOJ 17626 - Four Squares #2 (0) | 2021.02.03 |
BOJ 2858 - 기숙사 바닥 (0) | 2021.01.28 |
[Week of Line Sweep] BOJ 2594 (0) | 2021.01.23 |
[Week of Line Sweep] BOJ 14465 (0) | 2021.01.20 |
Comments