TIL #41

loci·2024년 6월 10일
0

TIL

목록 보기
39/103

피보나치 수

n번째 피보나치수를 1234567로 나눈 나머지 값을 반환한다.


나의 풀이

class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        var nArray = intArrayOf(0, 1)
        
        for (i in 0 until n-1){
            nArray += (nArray[i] + nArray[i + 1]) % 1234567
        }
        answer = nArray.last() 
        
        return answer
    }
}

다른사람의 풀이

class Solution {
    fun solution(n: Int): Int {
        var ans = Array(n+1) { i -> 0 }
        ans[1] = 1
        for(i in 2..n) ans[i] = (ans[i-1] + ans[i-2])%1234567
        return ans[n]
    }
}

나의코드는 동적으로 배열을 확장시키는데 반해 이렇게 하면 고정크기의 배열을 생성해 중간에 배열을 확장하지 않아 속도가 훨씬 빠르다.

class Solution {

   fun solution(n: Int): Int {
    var a = 0
    var b = 1
    var c = 0

    if(n==1) return 1
    for(i in 1..n){
    c = (a + b) % 1234567
    a = b
    b = c
    }
    return a
   }
}

배열을 생성하지 않고 계산하는 방법


기초문법특강

상속이란
상속이란 클래스들의 핵심적이고 공통적인 것들을 추출해 재사용하거나 확장할 수있게 해주는 개념. 예를 들어 차라는 클래스가 있고 승용차, 트럭, 버스의 클래스가 있으면 이 차들은 바퀴가 4개인 공통점이 있기 때문에 차라는 클래스에서 4개의 바퀴를 상속해주면 승용차, 트럭, 버스 클래스들은 중복적인 내용을 구현하지 않고 상속받아 사용할 수 있으므로 코드의 재사용성을 높일 수 있다.

추상화란

오늘 추상화에 대해서 간단하게 이해한 내용은 추상화는 대규모 프로젝트에서 많은 함수와 클래스들을 사용하게 되는데 아직 구현하지 않은 함수들을 미리 이름만 설정해 놓을 수 있고 각각 구현된 함수들의 어떤 기능을 하는지만 알수있다면 상세한 구현내용은 알지못해도 간단히 가져와 사용할 수 있게 해준다. 그러면 각 함수를 따로 분리할 수 있어 테스트와 유지보수를 하기에 쉬워지고 작업의 효율성이 증가한다.
만약 order라는 함수가 있을때 주문한내용을 가져오는 기능이라는 것만 알 수 있다면 세부적인 구현내용은 알 필요없이 쉽게 가져다 쓸 수 있어 작업을 효율적이게 만든다.

profile
편리한 개발자

0개의 댓글