코딩 테스트/백준
[백준] 10870번 : 피보나치 수 5(JAVA / 자바)
토자맨
2023. 3. 25. 11:01
1. 배열을 이용한 풀이
if 조건분 부분 없이 else 부분만 적고 제출했더니 계속 런타임 에러 (ArrayIndexOutOfBounds)가 나서 한참을 헤맸다.
문제를 다시 한번 읽어보니 문제 조건에 cnt가 0~20이라고 조건을 줬고 0일 경우 else 부분의 for 조건문에 cnt-1이 불가능하기 때문에 조건을 추가해줘야 하는 것이었다.
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
if (cnt == 0){
System.out.println(0);
}
else {
int[] fn = new int[cnt+1];
fn[0] = 0;
fn[1] = 1;
for (int i = 0; i < cnt-1; i++) {
fn[i+2] = fn[i] + fn[i+1];
}
System.out.println(fn[cnt]);
}
}
}
좀 더 깔끔한 풀이
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
int[] fn = new int[cnt+1];
for (int i = 0; i < cnt + 1; i++) {
if(i==0) fn[i] = 0;
else if (i == 1) fn[i] = 1;
else fn[i] = fn[i-1] + fn[i-2];
}
System.out.println(fn[cnt]);
}
}
2. 재귀를 이용한 풀이
나는 재귀는 생각도 못하고 배열로만 풀었는데 다른 사람들의 풀이를 보고 기억이 났다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = sc.nextInt();
System.out.println(fibonacci(cnt));
}
static int fibonacci(int n)
{
if (n==0) return 0;
if (n==1) return 1;
else return fibonacci(n-1) + fibonacci(n-2);
}
}