자바 공부를 시작하고 처음으로 알고리즘 문제를 풀었는데 이러한 오류를 마주쳤다.
예외 설명을 보면 입력받은 값보다 더 많은 값을 찾을때 발생하는 예외다.
예를 들어서 숫자 1개를 입력받았는데 a,b 각각에 입력받은 값을 부여하려고 할때 이러한 오류가 발생한다.
그러나 나의 코드에는 이러한 에러가 없었기에 헤맸는데 결과적으로는 Scanner의 갯수 문제였다.
자바에서는 Scanner이 프로그램마다 1개밖에 존재할 수 없다.
Scanner 객체를 생성하면서 입력을 받는다고 생각했는데, next 메소드에서 입력을 받는 것이였다.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int[] a = new int[n];
Scanner sc2 = new Scanner(System.in);
for (int i=0; i<n; i++) {
a[i]=sc2.nextInt();
System.out.println(a[i]);
}
int[] b = new int[n];
for (int i=0; i<n; i++) {
b[i]=1;
System.out.println(b[i]);
}
for (int i=1; i<n; i++) {
for (int j=0; j<i; j++) {
if (a[i]<a[j]) {
b[i] = Math.max(b[j]+1,b[i]);
}
}
}
int maxAns = Arrays.stream(b).max().getAsInt();
System.out.println(maxAns);
}
}
원래는 이러한 코드였는데
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int[] a = new int[n];
for (int i=0; i<n; i++) {
a[i]=sc.nextInt();
}
int[] b = new int[n];
for (int i=0; i<n; i++) {
b[i]=1;
}
for (int i=1; i<n; i++) {
for (int j=0; j<i; j++) {
if (a[i]<a[j]) {
b[i] = Math.max(b[j]+1,b[i]);
}
}
}
int maxAns = Arrays.stream(b).max().getAsInt();
System.out.println(maxAns);
}
}
이렇게 수정하고 통과할 수 있었다.