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
- DFS
- 스프링 부트
- 알고리즘
- springboot
- 클라우드 컴퓨팅
- 백준
- VPC
- 스프링부트
- Kafka
- 카프카
- 인천여행
- JPA
- Spring
- aws
- 월미도
- 클라우드
- 쿠버네티스
- 오일러프로젝트
- 스프링
- 로드밸런서
- 프로그래밍문제
- Docker
- Spring Boot
- 자료구조
- Elasticsearch
- Apache Kafka
- 백트래킹
- gcp
- Spring Data JPA
- 코드업
Archives
- Today
- Total
GW LABS
[Backjoon] 쉬운 계단 수 본문
백준 18044번 쉬운 계단 수 문제는 전형적인 백트래킹, 동적계획법 문제였다. 처음 문제를 접했을 때 당황했지만, 천천히 의사코드로 먼저 로직을 구성하고 나서는 어렵지 않게 풀이할 수 있었다. 하향식으로 문제를 풀었지만 상향식 해결법으로 풀이하는 고수들도 많다. 의사코드를 적어놔서 독자 여러분들도 어렵지 않게 로직을 이해할 수 있을 거라고 생각한다.
import sys
def find_step_number(length, last_num, container, cache):
# 컨테이너 길이가 N이라면
if length == 0:
return 1
if cache[length][last_num] != -1:
return cache[length][last_num]
# 숫자 0-9까지 반복
count = 0
for num in range(0, 10):
# 컨테이너가 비어있고 숫자가 0이라면
if len(container) == 0 and num == 0:
continue
# 지금 숫자가 컨테이너 이전 숫자와의 차이가 1이라면
if len(container) == 0 or abs(num - container[-1]) == 1:
# 숫자 삽입
container.append(num)
# 재귀호출
count += find_step_number(length - 1, num, container, cache)
# 숫자 빼기
container.pop()
cache[length][last_num] = count
return count
if __name__ == "__main__":
length = int(sys.stdin.readline())
cache = [ [-1 for _ in range(10)] for _ in range(length + 1)]
count = find_step_number(length, 0, [], cache)
print(count % 1000000000)
'Algorithm & DataStructure' 카테고리의 다른 글
[Backjoon] 단어 뒤집기 2 (0) | 2020.11.26 |
---|---|
[Backjoon] 섬의 개수 (0) | 2020.11.18 |
[Backjoon] 정수 삼각형 (0) | 2020.11.05 |
[Backjoon] 스타트와 링크 (0) | 2020.10.30 |
C++로 구현하는 자료구조 (9) - Trie (0) | 2020.10.28 |
Comments