[4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (41일차)
[4코1파] 2023.01.13~ (32일차)

Today :

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 건바이건..

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글