하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
[3코1파] 2023.01.04~ (41일차)
[4코1파] 2023.01.13~ (32일차)
2023.02.13 [41일차]
프로그래머스 LV2
멀리 뛰기
https://school.programmers.co.kr/learn/courses/30/lessons/12914
문제 설명
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 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 이하인 정수입니다.
입출력 예
입출력 예 설명
입출력 예 #1
위에서 설명한 내용과 같습니다.
입출력 예 #2
(2칸, 1칸)
(1칸, 2칸)
(1칸, 1칸, 1칸)
총 3가지 방법으로 멀리 뛸 수 있습니다.
문제 풀이 방법
1,
2,
1,1
1,2
이런식으로 진행되는 걸 봐서 dp 일꺼라고 예상함
그러나 두뇌 풀가동해도 못풀었다
dp 는 맞았다 내가 코드로 구현을 못해먹었을 뿐..
피보나치 수열과 또~옥같은 로직으로 풀면된다
엥?
문제 다시 읽어보니까 %1234567 해줘야 함
내 코드
def solution(n):
if n<3:
return n%1234567
dp = [0]*(n+1)
dp[1], dp[2] = 1,2
for i in range(3,n+1):
dp[i] = dp[i-1]+dp[i-2]
return dp[i]%1234567
증빙
다른 사람 풀이
케이스가 개편되서 기존에 풀었던 재귀가 가장 좋아요였으나,
재귀로 풀면 시간복잡도가 상당히 늘어나서, dp로 푸는게 가장 베스트처럼 보인다
여담
step by step 건바이건..