Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 요세푸스 문제
- 백준 1158번
- 경상국립대학교
- linc3.0
- 백준 7576번
- 고속거듭제곱알고리즘
- 백준 토마토
- 백준 1158
- 1010번: 다리 놓기 (Python)
- max_length
- PS
- ncp배포
- 다리 놓기
- epsp
- lgh
- python
- Django
- 백준 다리놓기
- 7576번
- 백준
- 문제풀이
- 9735번
- json
- Charfield
- 백준 7576
- 그래프 탐색
- ncloud서버
- 5397
- NaverCloudPlatform
- 16953
Archives
- Today
- Total
DolphinDash
백준 16953번: A → B (Python) 본문
간단한 dp문제인 줄 알고 덤볐다가 조금 오래걸렸다. 처음엔
def dp(que, target, tries):
nq = []
if que[0] > target:
return -1
for value in que:
if value * 2 == target or value * 10 + 1 == target:
return tries+1
else:
nq.append(value*2)
nq.append(value*10 + 1)
return dp(nq, target, tries+1)
a, b = map(int, input().split())
print(dp([a], b, 1))
재귀 함수를 만들어서 돌렸더니 메모리 초과가 났다. 일단 tries 횟수가 높아지면 높아질수록 필요 메모리양이 늘어나고 que[-1]의 메모리엔 높은 수가 들어가기 때문에 자릿수 표현으로 많은 메모리가 추가로 들어간다고 추측된다. 그래서 list를 사용하지 않고 코드를 짜볼려다가 그랬다간 시간이 기하급수적으로 늘어나서 다시 돌아와 코드를 뜯어보았다.
#que의 최솟값이 넘어가면 -1
if not que:
return -1
if value * 2 < target:
nq.append(value*2)
if value * 10 + 1 < target:
nq.append(value*10 + 1)
그러던 중, 만들 수 없는 경우를 검사하는 코드를 조금만 수정하면 메모리를 크게 줄일 수 있겠다는 생각이 들어서 위의 코드를
def dp(que, target, tries):
nq = []
if not que:
return -1
for value in que:
if value * 2 == target or value * 10 + 1 == target:
return tries + 1
else:
if value * 2 < target:
nq.append(value*2)
if value * 10 + 1 < target:
nq.append(value*10 + 1)
return dp(nq, target, tries + 1)
a, b = map(int, input().split())
print(dp([a], b, 1))
이런식으로 바꿨다. 그러니 메모리 문제도 해결되었고 dp로 시간도 줄였다
'PS > Solve' 카테고리의 다른 글
백준 1010번: 다리 놓기 (Python) (0) | 2023.05.23 |
---|---|
백준 1991번: 트리 순회 (Python) (0) | 2023.05.20 |
백준 1629번: 곱셈 (Python) (0) | 2023.04.06 |
백준 5397번: 키로거 (Python) (0) | 2023.04.06 |
백준 9735번: 삼차 방정식 풀기 (Python) (0) | 2023.04.05 |