본문 바로가기

카테고리 없음

[프로그래머스 LV2] 멀리 뛰기

https://school.programmers.co.kr/learn/courses/30/lessons/12914

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

계단 1칸 - 1가지

계단 2칸 - 2가지

.... 계단의 n칸?

이 무엇일까로 접근을 하였습니다.

d(n) = d(n-1) + d(n-2)로 dfs로 구현하여서 실행을 해보았습니다.

def solution(n):
    # d(n) = d(n-1) + d(n-2)
    def dfs(n):
        if n == 1:
            return 1
        elif n == 2:
            return 2
        else:
            return dfs(n-1) + dfs(n-2)
    cnt = dfs(n)
    return cnt

실행결과

그러면 그렇지 너무 쉽다했다..ㅜ

테스트케이스 하나는 실패할 뿐더러(음..아마도 특이케이스를 잡아야한다)

더 중요한 것은 시간초과!

음..시간복잡도를 줄이는 방향으로 풀이를 해야겠습니다.

def solution(n):
    if n == 1:
        return 1
    # dp테이블 초기화
    dp = [0] * (n + 1)
    dp[1] = 1
    dp[2] = 2
    for i in range(3,n+1):
        dp[i] = dp[i-1] + dp[i-2]
    return dp[-1]%1234567

dfs가 아닌 dp를 사용하여서 간단하게 풀었습니다.

문제의 핵심인 수열을 생각을 하였는데 더 깊게 생각하여서 바로 풀이하지 못하였습니다.

다음엔 푼다!