200921 월 [BOJ] 2193

Dynamic Programming 이란, 이전에 계산된 값들을 통해 구하고자 하는 값을 얻는 풀이방법.

BOJ 2193

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

public class Main {	
	
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	
    	int N = Integer.parseInt(br.readLine());
    	br.close();
    	
    	long[][] dp = new long[91][2];
    	dp[1][0] = 0;
    	dp[1][1] = 1;
    	for(int i=2;i<=N;i++) {
    		dp[i][0] = dp[i-1][0] + dp[i-1][1];
    		dp[i][1] = dp[i-1][0];
    	}
    	bw.write(String.valueOf(dp[N][0] + dp[N][1]));
    	
    	bw.flush();
    	bw.close();
    }
}

Bottom-up 방식.

자료형을 int로 했을 땐 값 범위가 벗어나 버림. long으로 바꾸자 정답~

int의 범위 : -2,147,483,648~2,147,483,647

오늘 면접 중에도 질문을 들었는데, "대략 -20억에서 20억 사이입니다~" 혹은 "-2의 31제곱에서 2의 31제곱-1입니다" 라고만 대답했어도 얼마나 좋았을까😑

좋은 웹페이지 즐겨찾기