728x90
https://www.acmicpc.net/problem/2839
N이 5000밖에 안 돼서 dp말고 단순 무식 반복문으로도 충분히 풀 수 있을것 같았는데 그냥 dp로 풀었다.
메모이제이션 하며 5키로로 분할했을때, 3키로로 분할했을떄 두 경우중 최소값을 출력하며 메모이제이션 dp를 갱신해줬다.
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
31
32
|
import sys
sys.setrecursionlimit((10000))
input = sys.stdin.readline
dp = [987654321] * 5001
n = int(input())
def devide(x):
if x == 1 or x == 2:
return 987654321
# 정확히 나뉘었으면 횟수 반환
if x == 0:
return 0
if dp[x] != 987654321:
return dp[x]
# 5보다 크면 5랑 3으로 나눈것중 가장 작은값을 출력
if x >= 5:
dp[x] = min(devide(x - 5) + 1, devide(x - 3) + 1)
else:
dp[x] = devide(x - 3) + 1
return dp[x]
cnt = devide(n)
if cnt >= 987654321:
print(-1)
else:
print(cnt)
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 4948번 ] 베르트랑 공준 (파이썬/python) (0) | 2021.06.14 |
---|---|
[백준 1011번 ] Fly me to the Alpha Centauri (파이썬/python) (0) | 2021.06.14 |
[백준 1316번 ] 그룹 단어 체커 (파이썬/python) (0) | 2021.06.14 |
[백준 2941번 ] 크로아티아 알파벳 (파이썬/python) (0) | 2021.06.14 |
[백준 1157번 ] 단어 공부 (파이썬/python) (0) | 2021.06.14 |