inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Do it! 알고리즘 코딩테스트 with JAVA

세그먼트 트리 (인덱스 트리)

[P11726 2*N 타일채우기] top down 방식을 사용하니 런타임 에러가 발생합니다.

106

devel

작성한 질문수 5

0

top down 방식을 사용하니 런타임 에러가 발생합니다. 이 문제는 bottom up으로만 풀어야하나요? 런타임 에러가 난 이유는 무엇일까요?


import java.util.Scanner;

public class Main {
    static long[] D;
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        D = new long[n+1];
        for(int i = 0 ; i < n+1 ; i++){
            D[i] =-1;
        }
        D[1] =1;
        D[2] =2;
        long result = DP(n);
        System.out.println(result);
    }

    public static long DP(int n){
        if(D[n] != -1){
            return D[n];
        }
        return D[n] = (DP(n-1) + DP(n-2)) % 10007;
    }
}

java 코딩-테스트 알고리즘

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
devel님, [P11726 2*N 타일채우기] 문제에서 런타임 에러가 발생하는 이유는 n 값이 1 또는 2일 때 D 배열을 미리 초기화하고 사용하지 않아, 인덱스 범위 초과가 일어날 가능성이 있기 때문입니다. 이 문제는 top-down 방식으로 해결할 수 있지만, 최소한의 경계 조건 처리가 필요합니다. 주어진 코드에서 런타임 에러를 방지하기 위해 아래와 같이 변경해보세요:

  1. D 배열 초기화를 할 때 n이 0 또는 1일 경우를 처리해 줍니다.
  2. D 배열에 초기 값 0과 1에 대한 값을 미리 할당해 줍니다.
D[0] = 0; // 추가
D[1] = 1;
if (n >= 2) { // 추가 조건
    D[2] = 2;
}

또한, 재귀 호출이 너무 깊어질 경우 런타임 에러가 발생할 가능성이 있으므로, n의 값이 크게 느껴질 때는 bottom-up 방식이 더 안정적일 수 있습니다. bottom-up 방식은 작은 문제를 쌓아가면서 큰 문제를 해결하므로, 스택 오버플로우 등의 위험이 줄어듭니다.

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

백준 1940 주몽의 명령 시간복잡도

0

62

0

다음영상이 문제 풀이 영상이라고 하셨는데 문제풀이 영상이 누락되어있는 것 같습니다

0

129

1

코딩테스트 디버깅

0

351

1

탐색 순서 질문

0

149

1

2018 연속된 자연수의 합 구하기 백준 사이트에서 메모리 초과 오류가 발생합니다.

0

204

1

1강 시간복잡도 중간에 중첩for문 직전에 상수는 상관없어요 하신 부분이 이해가 안됩니다

0

161

1

왜 int, long은 안되는지 궁금합니다.

0

225

1

DNA 비밀번호 (백준 12891) 통과가 안됩니다.

0

527

2

LCA 빠르게 구하기 Java 코드 시간초과

0

245

1

스택문제 백준 1874

1

460

1

백준11659 구간합 런타임 에러

0

307

1

백준 2178 미로탐색 질문 입니다.

0

449

1

구간합구하기1 (백준11659)

0

422

1

혹시 다른 ide에서 잘 돌아가는 프로그램이

0

352

1

내림차순으로 정렬하기 강의에서..

0

270

1

백준 11720 숫자의 합 질문 있습니다

0

434

1

(숫자의 합)1<=N <=100 사이의 값

0

385

1

소수구하기-백준 1929 질문

0

351

1

12891_DNA비밀번호

0

633

3

숫자의 합 구하기

0

393

1

안녕하세요 질문있습니다.

0

338

0

union 코드에 질문 있습니다.

0

406

2

[그리디 실전 문제] 최솟값을 만드는 괄호 배치 찾기 (백준 1541) - 반례를 못찾겠습니다 ㅠㅠ

1

312

1

[이진 탐색 실전 문제] 원하는 정수 찾기 편 질문

0

507

1