public class LIS {
public static int length = 0;
public static int max = 1;
public static int [] cache;
public static int [] sequence;
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
int testcaseNum = scanner.nextInt();
for(int i = 0; i < testcaseNum; i ++) {
length = scanner.nextInt();
cache = new int[501];
sequence = new int[501];
Arrays.fill(cache, -1);
for(int j = 0; j < length; j ++)
sequence[j] = scanner.nextInt();
recusive(0, cache, sequence);
System.out.println(max);
//for(int ii = 0; ii < length; ii ++)
//System.out.println(cache[ii]);
}
}
public static void recusive(int start, int [] cache, int [] sequence) {
cache[length-1] = 1;
for(int i = length - 2; i >= 0; i --) {
int index = 0;
int count = 0;
int first = 0;
for(int j = i + 1; j < length; j ++) {
if(sequence[i] < sequence[j]) {
count ++;
if(cache[j] == -1) {
recusive(j, cache, sequence);
}
else {
if(first == 0) {
index = j;
first ++;
}
else {
int temp = 0;
if(cache[index] < cache[j]) {
temp = index;
index = j;
}
if(cache[temp] == cache[j] && sequence[temp] < sequence[j]) {
index = j;
}
}
}
}
}
if(count == 0) {
cache[i] = 1;
continue;
}
cache[i] = cache[index] + 1;
max = max > cache[i] ? max : cache[i];
//index = i - 1;
}
}
이미 해결하셨을 거라 생각되지만, 답변을 한 번 올려봅니다. 복수개의 정답을 "max"라는 Integer형 변수를 통하여 출력을 하시고 있습니다. 이렇게 되면 첫 번째 케이스 부터 끝날 때까지 정답 값이 오름차순으로 나온다면 문제가 없겠지만, 내림 차순으로 정답이 도출된다면 첫 번째 케이스에서 나온 값으로 제출을 하는 현상이 발생합니다. 즉, "max"값을 새로운 테스트 케이스 시작 할때 마다 초기화를 해주셔야 합니다.
pchanwan
package _8;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Vector;
public class LIS {
public static int length = 0;
public static int max = 1;
public static int [] cache;
public static int [] sequence;
public static void main(String [] args) {
Scanner scanner = new Scanner(System.in);
int testcaseNum = scanner.nextInt();
for(int i = 0; i < testcaseNum; i ++) {
length = scanner.nextInt();
cache = new int[501];
sequence = new int[501];
Arrays.fill(cache, -1);
for(int j = 0; j < length; j ++)
sequence[j] = scanner.nextInt();
}
다ㅏ이나믹프로그래밍을 앞에서말고 뒤에서부터 진행했는데요 문제가뭘까요? 예외테스트케이스가 존재하는거같긴한데 찾기힘드네요 ㅠㅠ...도와주세요
6년 전