inflearn logo
강의

Course

Instructor

Do it! Algorithm Coding Test with JAVA

Segment Tree (Index Tree)

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

105

devel

5 asked

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 코딩-테스트 알고리즘

Answer 1

0

communityai8509

안녕하세요, 인프런 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

59

0

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

0

127

1

코딩테스트 디버깅

0

347

1

탐색 순서 질문

0

148

1

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

0

201

1

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

0

159

1

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

0

224

1

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

0

525

2

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

0

244

1

스택문제 백준 1874

1

459

1

백준11659 구간합 런타임 에러

0

306

1

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

0

448

1

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

0

422

1

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

0

349

1

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

0

267

1

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

0

433

1

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

0

383

1

소수구하기-백준 1929 질문

0

350

1

12891_DNA비밀번호

0

633

3

숫자의 합 구하기

0

391

1

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

0

336

0

union 코드에 질문 있습니다.

0

401

2

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

1

309

1

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

0

505

1