[BOJ] 2193 이친수

ProblemSolving / / 2022. 5. 18. 22:27

이친수

링크: https://www.acmicpc.net/problem/2193

KakaoTalk_Photo_2022-05-18-22-18-42

이친수를 구하기 위해서 n번째 자리에서 이전의 자료를 활용해야겠다고 생각을 했다.
예로 5자리의 이친수 개수를 구하기 위해서는 3자리의 이친수까지 개수를 모두 더한 값과 10000의 1을 더한 값인 5가 된다.
이런 식으로 이전에 구한 데이터들을 활용하고, 각 자리를 왼쪽으로 shift 연산을 하며 구하면 된다고 생각을 했다.


하지만 이를 계속해서 구해보니 특이점을 발견했다.
[1, 1, 2, 3, 5, 8, 13 ..]으로 나아가는 것이 fibonacci 수열 규칙성을 띄는 것을 발견했다.

그래서 경로를 바꾸어 피보나치 수열로 해결을 했다.


이것이 가장 최적의 해결법은 아니라고 생각이 되는데, 더 좋은 방법을 추후 탐구해볼 예정이다.

  • 정답 코드
class Boj2193 {
    companion object{
        @JvmStatic
        fun main(args: Array<String>){
            val n = readln().toInt()
            val fibo = Array(n+1,{(0).toBigInteger()})

            if(n == 0) {
                println(0)
                return
            }
            fibo[0] = (0).toBigInteger()
            fibo[1] = (1).toBigInteger()

            for(i in 2..n)
                fibo[i] = (fibo[i-2] + fibo[i-1])

            println(fibo[n])
        }
    }
}

'ProblemSolving' 카테고리의 다른 글

[프로그래머스] [3차] 파일명 정렬  (0) 2022.05.20
[BOJ] 4375 1  (0) 2022.05.19
[BOJ] 1245_농장 관리  (0) 2022.05.15
[BOJ] 1094_막대기  (0) 2022.05.14
[BOJ] 1501_영어 읽기  (0) 2022.05.13
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기