Notice
Recent Posts
Recent Comments
Link
반응형
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붕어의 개발 기록

8월 12일 99클럽 항해 22일 본문

항해99(2024-07~08)/99클럽 하루 한문제

8월 12일 99클럽 항해 22일

은붕어_ 2024. 8. 12. 12:31
반응형

99클럽 항해 22일차

 

오늘의 문제는 멀리 뛰기이다.

 

홀수의 경우 i는 n을 2로 나눈 몫으로 설정하고 ∑(n-k)Ck가 1부터 i까지로 생각하고 조합의 합을 구하고.

짝수의 경우 홀수의 경우에서 +1을 해서 조합의 합을 구하려고 했으나 

class Solution {
    public long solution(int n) {
        int count = n / 2;
        int check = n % 2;
        long answer = 1;

        for (int i = 1; i <= count; i++) {
            answer += comb(n - i, i);
            n=n-2;
        }

        if (check == 0) {
            answer += 1; 
        }
        answer%=1234567;

        return answer;
    }

    public long fact(int n) {
        if (n <= 1) {
            return 1;
        }
        return n * fact(n - 1);
    }

    public long comb(int n, int i) {
        if (i > n) return 0;
        return fact(n) / (fact(n - i) * fact(i));
    }
}

 

시간초과와 일부 오답으로 생각을 처음부터 다시하게 되었다. 저번 문제도 동적계획법을 사용했었기 때문에 이번에도 비슷한 방식으로 생각을 하게 되었고, 문제는 dp[i] = dp[i-1]+dp[i-2]의 점화식을 따르는 구조임을 알 수 있고, 오류를 방지하기 위해서 dp[1], dp[2]의 값을 미리 입력해준다.

class Solution {
 
    public long solution(int n) {
        long[] answer = new long[2001];
        answer[1] = 1;
        answer[2] = 2;
 
        for (int i = 3; i < 2001; i++) {
            answer[i] = (answer[i - 1] + answer[i - 2]) % 1234567;
        }
 
        return answer[n];
    }
}

 

 

 

 

 

 

 

 

 

반응형