일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Java
- exception
- DesignPattern
- functional programming
- JDBC
- 프로그래머스
- Eclipse
- Rails
- javscript
- Network
- Pattern
- Collection
- 큐
- 함수형 프로그래밍
- Spring
- lambda calculus
- design-pattern
- 백준
- JavaScript
- Python
- tcp
- 겨울카카오인턴
- solid
- 자바
- 디자인패턴
- 로버트마틴
- 파이썬
- 람다 칼큘러스
- 스택
- Collections
Archives
- Today
- Total
개발자 노트
[백준]9461.파도반수열 본문
문제설명
문제가 간단하여 설명할 것이 없다.
접근 방법
정의를 이해하여 순환식을 작성할 수 있겠지만 복잡해보여서 주어진 수열만으로 규칙을 찾아냈다. 즉, 아이큐 테스트 문제라 생각하고 접근했다.
그래서 규칙을 나타내면 f(n) = f(n-2)+f(n-3)이 되고, n-3을 보듯, 순환식이 적용되는 n의 범위는 n>=4가 된다.
따라서 n= 1, 2 3 일 때 초기값을 정해주었다.
그리고 인풋값의 범위가 최대 100이기 때문에 dp 100번까지 미리 돌고 요청한 값을 출력하면 정답.
그런데 처음에 100을 테스터케이스 최대 수라고 잘못해석하여 범위를 한정지을 수 없다는 생각에 메모제이션으로 푸는 것이 더 간결할 것 같아 메모제이션으로 접근했다.
구현
memo = {1:1,2:1,3:1}
def Wave(n):
if n in memo:
return memo[n]
else:
memo[n] = Wave(n-2)+Wave(n-3)
return memo[n]
n = int(input())
for _ in range(n):
req = int(input())
print(Wave(req))
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준]17837.새로운게임2 (0) | 2020.03.05 |
---|---|
[백준]11057.오르막수 (0) | 2020.03.04 |
[백준]2163.초콜릿자르기 (미제) (0) | 2020.03.03 |
[백준]11053. 가장 긴 증가하는 부분 수열 (0) | 2020.03.02 |
[백준]1912. 연속합. (0) | 2020.02.29 |
Comments