728x90
Level 1
문제 설명
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.
제한 사항
- n은 1 이상, 2000 이하인 정수입니다.
입출력 예
n | result |
4 | 5 |
3 | 3 |
나의 코드
def solution(n):
answer = 0
jump = {}
jump[0], jump[1] = 1, 1
for i in range(2, n + 1):
jump[i] = jump[i-1] + jump[i-2]
answer = jump[n] % 1234567
return answer
- 스킬체크 레벨3에 도전했다가 만난 문제! (2번은..너무 어려워서 포기..)
- DP 문제였다.
예) n = 4, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
으로 뛰어 맨 끝 칸에 도착할 수 있다고 했다.
문제를 작게 나눠보자!
효진이가 뛰지 않는(0칸) 경우의 수는 1이다.
효진이가 1칸을 뛰는 경우의 수는 1이다.
효진이가 2칸을 뛰는 경우의 수는 2칸 = 1칸(1+1) + 0칸(0 + 2, 결국 2칸 뛰는 것) 으로 2이다.
효진이가 3칸을 뛰는 경우의 수는 3칸 = 2칸(2+1) + 1칸(1 + 2; 2 + 1) 으로 3이다.
여기서 다음 점화식을 뽑을 수 있다.
jump[0] = 1, jump[1] = 1
jump[2] = jump[1] + jump[0]
jump[3] = jump[2] + jump[1]
jump[i] = jump[i-1] + jump[i-1] # (단, i >= 2)
728x90
'🧇 Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 모의고사 (0) | 2021.08.04 |
---|---|
[프로그래머스] - 부족한 금액 계산하기 (0) | 2021.08.04 |
[코딩테스트 연습] - 크레인 인형뽑기 🍫 (0) | 2021.03.20 |
[코딩테스트 연습] - 다트 게임 🍫 (0) | 2021.02.27 |
[코딩테스트 연습] - 비밀지도 🍫 (0) | 2021.02.27 |