TIL #45

loci·2024년 6월 14일
0

TIL

목록 보기
43/111


멀리뛰기

1과 2만 가지고 n을 만들 수 있는 경우가 몇개인지 구해야 한다.

어떻게 풀지 고민하다가 n이 1일때부터 6일때까지의 숫자를 손으로 구해보니 뭔가 규칙성이 있는 듯한 숫자들이 나왔다. 그래서 좀 더 생각을 해봤는데 얼마전에 피보나치 수열 문제를 푼게 생각나서 피보나치 수열이란걸 알게되 해당 풀이방식으로 풀게 되었다.

피보나치수열이 DP의 대표적문제라고 해서 DP에 대해 공부를 해봐야 할 것같다.


나의풀이

class Solution {

    fun solution(n: Int): Long {
        var answer: Long = 0
        var a = 1L
        var b = 0L
        for(i in 1..n){
            answer = a + b
            var temp = a
            a = a % 1234567+ b % 1234567
            b = temp
        }
        return answer % 1234567

    }

}

처음에 피보나치수열을 구했는데 테스트케이스에서 틀린 문제가 나왔다. 이유는 수가 너무 커져서 그런것이었다. 그래서 1234567로 나눈 나머지로 계속 계산해 큰수가 나오지 않게 풀어주었다.


다른사람의 풀이

class Solution {
    fun solution(n: Int): Long {
        var answer: Long = 0
        if(n == 1) return 1
        if(n == 2) return 2
        
        val dp = LongArray(n + 1)
        dp[1] = 1
        dp[2] = 2
        
        for(i in 3..n){
            dp[i] = (dp[i-2] + dp[i-1]) % 1234567
        }
        return dp[n]
    }
}
profile
편리한 개발자

0개의 댓글