티스토리 뷰
제일 처음에는 재귀를 이용하여 문제를 풀었다.
그러나 재귀함수를 이용할 경우 반복되는 연산이 많아 시간초과가 뜬다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 재귀호출 ver
import sys
num_of_stairs = int(input())
stairs = []
for _ in range(num_of_stairs):
stairs.append(int(sys.stdin.readline().strip()))
# s_n = s_n-1 + a_n or s_n-2 + a_n
def climbing(n, two_step): # two_step은 이전 계단에서 2칸 이동했는지 확인
if n <= 0:
return 0
else:
if two_step:
return max((climbing(n-1, False)+stairs[n-1]),(climbing(n-2, True)+stairs[n-1]))
else:
return climbing(n-2, True)+stairs[n-1]
print(climbing(num_of_stairs, True)) # 초기 two_step 값을 true로 해야 다음 계단을 한칸 혹은 두칸 이동할 수 있다.
|
cs |
반면 동적프로그래밍을 이용하면 반복되는 연산의 결과를 배열에 저장하여 필요할 때마다 사용할 수 있어 시간을 단축할 수 있다.
재귀함수가 계단의 도착점에서부터 연산을 시작했다면 동적프로그래밍은 계단의 시작점에서 연산을 시작한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 동적프로그래밍 ver
import sys
num_of_stairs = int(input())
stairs = []
for _ in range(num_of_stairs):
stairs.append(int(sys.stdin.readline().strip()))
dp = [[0,0] for _ in range(num_of_stairs+1)]
# [0,0]에서 첫번째 수는 계단 한 칸, 두번째 수는 계단 두 칸을 올라갔을 때의 합산 값
if num_of_stairs == 1:
print(stairs[0])
else:
for i in range(1, num_of_stairs+1):
dp[i][0] = stairs[i-1] + dp[i-1][1] # 계단을 한 칸만 올라갈 때
dp[i][1] = stairs[i-1] + max(dp[i-2]) # 계단을 두 칸만 올라갈 때
print(max(dp[num_of_stairs]))
|
cs |
'알고리즘 문제 > 백준 - 파이썬' 카테고리의 다른 글
백준 2981 - 검문 [python/파이썬] (0) | 2020.09.07 |
---|---|
백준 1920번 - 수 찾기 [python/파이썬] (0) | 2020.09.06 |
백준 2580_스도쿠 [python/파이썬] (0) | 2020.09.05 |
백준 1931_회의실배정 [python/파이썬] + sorted by key (0) | 2020.09.04 |
백준 11047번_동전 0 [python/파이썬] (0) | 2020.09.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- localhost https
- 브라우저 라우터
- 리액트 키
- React key
- mkcert
- Redux Thunk
- 백준
- 1463
- 해쉬 라우터
- props를 변경하지 않는 이유
- 파이썬
- props를 변경하지 못하는 이유
- Hash Router
- 리액트 리스트 key
- contentEditable focus
- 리액트 동작원리
- Browser Router
- 우아한테크코스
- 리덕스 썽크
- 우테코
- 리액트 리스트 키
- 인사이트
- 리액트 jsx
- 리액트 리덕스
- Python
- 댓글 모듈
- 다라쓰
- 프론트
- 프론트엔드
- 리액트 props
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함