새소식

Algorithm/프로그래머스

[코딩테스트 연습] - 멀리 뛰기

  • -
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
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.