오늘 푼 문제는 프로그래머스에 있는 LEVEL 2 피보나치 수 이다.
문제는 링크에서 확인 가능하다 (https://school.programmers.co.kr/learn/courses/30/lessons/12945#)
처음 문제를 접했을 때 1234567로 나누라는 것을 보고 아 정수의 범위를 생각하면서 풀어라고 준 문제구나라고 생각하고 재귀로 풀었다가 시간초과가 났다.
재귀의 단점인 연산속도가 느린 것 때문인 듯하다.
그래서 for문이나 꼬리재귀를 사용하여 풀어야겠다라고 생각하여 for문을 이용하여 풀었다.(구현이 더 쉬워서..)
class Solution {
fun solution(n: Int): Int {
var answer = 0
var fivoArr = Array<Int>(n+1, {0})
fivoArr[0] = 0;
fivoArr[1] = 1;
fivoArr[2] = 1;
for(i : Int in 3..n){
fivoArr[i] = (fivoArr[i-1] + fivoArr[i-2]) %1234567
}
answer = fivoArr.get(n)
return answer
}
}
문제를 다 푼 후 다른 사람들은 어떻게 풀었는지 찾아보다가
(A + B) % C = {(A % C) + (B % C)} % C라는 것을 알게 되었다.
자료형의 크기에 제한이 있는 언어의 경우 위와 같은 방법으로 풀어야 하는 것 같다.