피보나치 수
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라는 함수가 있을때 주문한내용을 가져오는 기능이라는 것만 알 수 있다면 세부적인 구현내용은 알 필요없이 쉽게 가져다 쓸 수 있어 작업을 효율적이게 만든다.