16. 다음은 Java 코드에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.
public class Main {
public static void main(String[] args) {
int[] data = {3, 5, 8, 12, 17};
System.out.println(func(data, 0, data.length - 1));
}
static int func(int[] a, int st, int end) {
if (st >= end) return 0;
int mid = (st + end) / 2;
return a[mid] + Math.max(func(a, st, mid), func(a, mid + 1, end));
}
}
GPT 풀이
배열: [3, 5, 8, 12, 17], 인덱스 0..4
1. 최상위 호출: func(a, 0, 4)
*mid = (0+4)/2 = 2 → a[2] = 8
*좌 = func(a, 0, 2)
*우 = func(a, 3, 4)
2. 좌측: func(a, 0, 2)
*mid = (0+2)/2 = 1 → a[1] = 5
*좌 = func(a, 0, 1)
*우 = func(a, 2, 2) → st=end → 0
*func(a, 0, 1):
*mid = (0+1)/2 = 0 → a[0] = 3
*좌 = func(a, 0, 0) → 0
*우 = func(a, 1, 1) → 0
*반환 = 3 + max(0, 0) = 3
*반환 = 5 + max(3, 0) = 8
3.우측: func(a, 3, 4)
*mid = (3+4)/2 = 3 → a[3] = 12
*좌 = func(a, 3, 3) → 0
*우 = func(a, 4, 4) → 0
*반환 = 12 + max(0, 0) = 12
4.최종 결합
*func(a, 0, 4) = a2 + max(좌=8, 우=12)
*= 8 + 12 = 20
저도 보고 이해 안됩니다.
자유 댓글