https://school.programmers.co.kr/learn/courses/30/lessons/12914
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 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 이하인 정수입니다.
풀이 설계
- 이번 dp는 dp[i] = dp[i-2] + dp[i-1] 이라는 점화식을 가지고 있다.
- n이 1이나 2일 경우를 미리 저장하고 dp를 채운다.
1차 시도 (런타임에러)
def solution(n):
dp = [0]*(n+1)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-2] + dp[i-1]
return dp[n] % 1234567
2차 시도 (성공)
def solution(n):
if n == 1:
return 1
dp = [0]*(n+1)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-2] + dp[i-1]
return dp[n] % 1234567
후기
- 찾아보니 이런 점화식을 가지고 피보나치 수열이라고 한다.
- 1차 시도에서 테스트 케이스 1개가 계속 런타임에러가 떴는데 알고보니 만약 n이 1이라면 dp배열이 1까지만 생성되어 dp[2]를 저장할 수 없기 때문이었다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 방문 길이 - 파이썬(python) (0) | 2024.03.24 |
---|---|
[프로그래머스] 점프와 순간 이동 - 파이썬(python) (0) | 2024.03.23 |
[프로그래머스] 스티커 모으기(2) - 파이썬(python) (0) | 2024.03.21 |
[프로그래머스] 보석 쇼핑 - 파이썬(python) (0) | 2024.03.20 |
[프로그래머스] 베스트앨범 - 파이썬(python) (0) | 2024.03.17 |
댓글