반응형
250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로그래머스
- bfs
- 백준7576 bfs
- dfs
- 이코테
- SSAFY 8기
- 알고리즘
- 코딩 교육
- ssafy 7기 교수님
- 유니온 파인드
- 삼성 청년 SW 아카데미
- 코딩교육
- 삼성청년sw아카데미
- git
- ssafy 7기
- React
- 웹 표준 사이트 만들기
- pytorch
- SSAFY 입학식
- SSAFY
- 전이학습
- 싸피 7기 입학식
- DenseNet
- 백준
- Learning
- 프로그래머스 고득점 kit
- DP
- ssafy 7기 합격
- SSAFYcial
- SWEA
Archives
- Today
- Total
개미의 개열시미 프로그래밍
[알고리즘] 백준1003 피보나치 함수 - 파이썬 본문
728x90
반응형
https://www.acmicpc.net/problem/1003
[풀이 코드]
t = int(input())
dp = [0] * 41
dp[0] = (1, 0)
dp[1] = (0, 1)
for i in range(2, len(dp)):
dp[i] = (dp[i - 1][0] + dp[i - 2][0], dp[i - 1][1] + dp[i - 2][1])
for _ in range(t):
print(*dp[int(input())])
1. 동적 프로그래밍 풀이로 해결한 문제로 dp배열은 '메모 이제이 션'개념을 활용했다.
메모 이제이 션(Memoization): 다이내믹 프로그래밍을 구현하는 방법 중 하나입니다.
- 한 번 계산한 결과를 메모리 공간에 메모하는 기법입니다.
- 같은 문제를 다시 호출하면 메모했던 결과를 그대로 가져옵니다.
- 값을 기록해 놓는다는 점에서 캐싱(Cashing)이라고도 합니다.
2. 보텀업 방식으로 상향식으로 차곡차곡 답을 해결해가는 방식으로 해결했습니다.
- 입력되는 수가 0과 1일 때 0과 1의 개수를 초기화해줍니다. 예를 들어 0일 때 출력되는 0의 개수는 1, 1의 갯수는 0이기에 dp[0] = (1, 0) 으로 1일 때 출력되는 0의 갯수는 0, 1의 갯수는 1이기에 dp [1] = (0, 1)입니다.
- 첫 번째 반복문안에서 dp [2] = dp[2 - 2] + dp [2- 1]처럼 순서대로 저장이 되게끔 구현하였습니다. 이렇게 dp배열을 미리 선언해두고 구현한 이유는 피보나치 함수는 중복되는 부분을 해결하기 위해 재귀로 구현하면 시간이 더 오래 걸립니다. 그래서 나중에 미리 저장했던 값을 통해 재귀로 구현하지 않기 위함입니다.
728x90
반응형
'알고리즘 > 다이나믹 프로그래밍' 카테고리의 다른 글
[알고리즘] 백준11727 2xn 타일링2 - 자바 (0) | 2022.03.31 |
---|---|
[알고리즘] 백준11726 2xn 타일링 - 자바 (0) | 2022.03.31 |
[알고리즘] 백준9184 신나는 함수 실행 - 파이썬 (4) | 2021.09.01 |
Comments