멀리 뛰기 - 프로그래머스

 

프로그래머스

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

programmers.co.kr

칸이 1개일 때 (1)

칸이 2개일 때 (1,1), (2)

칸이 3개일 때 (1,2), (2,1), (1,1,1)

칸이 4개일 때 (1,1,2), (2,2), (1,2,1), (2,1,1), (1,1,1,1)

 

자세히 보면 칸이 n개일 때 뛸 수 있는 방법은 n-1의 방법에 1씩 추가한 방법 + n-2의 방법에 2씩 추가한 방법이란 걸 알 수 있다.

즉, 동적 계획법(Dynamic Programming)으로 풀면 되는 문제이다.

식으로 작성하면 DP[n] = DP[n-1] + DP[n-2]라는 피보나치 수열의 형태가 된다.

 

풀이 방법

1. int형 벡터인 con을 선언한다.

2. con[0]과 con[1]에 1을 담는다.

3. con[i -1] + con[i - 2] % 1234567를 i가 n이 될 때까지 con에 push_back()한다.

4. 반복문이 끝난 후 con.back()을 리턴

#include <string>
#include <vector>

using namespace std;

long long solution(int n) {
    long long answer = 0;
    
    vector<int> con;
    
    con.push_back(1); con.push_back(1);
    
    for(int i = 2; i <= n; i++) {
        con.push_back((con[i - 1] + con[i - 2]) % 1234567);
    }
    
    answer = con.back();
    
    return answer;
}

'프로그래머스 > 2레벨' 카테고리의 다른 글

[1차]캐시/C++  (0) 2023.01.10
H-Index/C++  (0) 2023.01.10
점프와 순간 이동/C++  (0) 2023.01.10
예상 대진표/C++  (0) 2023.01.10
N개의 최소공배수/C++  (0) 2023.01.10

+ Recent posts