이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.


문제 설명

 

코드

package inflearn_algorithm.chapter2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class sec02_04 {
    public static void solution(int N) { //배열 이용
        Long[] arr = new Long[N];
        arr[0] = 1L;
        arr[1] = 1L;
        System.out.print(arr[0] + " ");
        System.out.print(arr[1] + " ");
        for(int i = 2; i < N; ++i)
        {
            arr[i] = arr[i - 2] + arr[i - 1];
            System.out.print(arr[i] + " ");
        }
    }

    public static void solution(Long N) { //배열 이용 X
        Long p = 1L, n = 1L;
        System.out.print(p + " " + n +" ");
        for(int i = 2; i < N; ++i)
        {
            Long c = p + n;
            System.out.print(c + " ");
            p = n;
            n = c;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        solution(Integer.parseInt(br.readLine())); //배열을 이용할 때
        solution(Long.parseLong(br.readLine())); //배열을 이용하지 않을 때
    }
}

 

설명

  • 반복문은 N-2번 반복되므로 O(N-2) = O(N)의 시간 복잡도를 가진다.
  • 각 반복에서 덧셈과 배열 접근 작업을 수행하므로 반복문의 전체 시간 복잡도는 O(N)이다.