주녘공부일지

[프로그래머스 C#] Lv.2 멀리 뛰기 본문

Programmers - C#/CodingTest Lv.2

[프로그래머스 C#] Lv.2 멀리 뛰기

주녘 2023. 12. 12. 15:12
728x90

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

 

프로그래머스

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

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

1과 2로만 갈 수 있다는 조건에서 규칙이 발생할 거라고 유추해 규칙을 찾기 위해 4까지 몇가지의 경우의 수가 나오는지 보다가 DP문제임을 확신

 

F(1) = 1

F(2) = 2

F(3) = 3 // F(1) + F(2)

F(4) = 5 //  F(2) + F(3)

F(n) = F(n-1) + F(n-2)

 

DP : Bottom-Up (Tabulation 방식) 을 사용함

https://godgjwnsgur7.tistory.com/109

 

[Algorithm C#] 동적 계획법(DP) / Memoization, Tabulation

1. 동적 계획법(DP : Dynamic Programming) 복잡한 하나의 큰 문제를 여러 개의 작은 문제로 나누어 해결하는 문제해결 방법 중 하나 - 작은 문제의 연산 결과를 저장해놓았다가 다시 큰 문제를 해결할

godgjwnsgur7.tistory.com

 

주석 참조

    public class Solution
    {
        public long solution(int n)
        {
            int answer = 0;

            // F(1) = 1, F(2) = 2, F(3) = 3
            if (n <= 3)
                return n;

            int dp1 = 2; // F(2)
            int dp2 = 3; // F(3)

            // F(4)부터 구함
            for (int i = 4; i <= n; i++)
            {
                // 1234567보다 커지면 나머지를 저장
                answer = (dp1 + dp2) % 1234567;

                // 다음 연산을 위한 세팅
                dp1 = dp2;
                dp2 = answer;
            }

            return answer;
        }
    }
728x90