런타임에러(ArrayIndexOutOfBound) 가 나는 이유
422
작성한 질문수 15
안녕하세요 강사님
강사님 강의 문제에 대한 질문이 아니라 답변하기 힘드시면 괜찮습니다.
강사님 강의를 다 듣고 추천해주신 백준 문제들을 풀다가 질문이 있어 질문드립니다.
백준 9019 문제에 관한 질문인데 백준에서 채점 받을때 ArrayIndexOutOfBound 가 나는 이유를 제 코드를 살펴봐도 어디서 문제이지 찾을 수 없어 질문드립니다.
9019 의 문제의 솔루션을 구글링 해봐도 다 똑같은 코드로만 작성을 해놔서 제가 작성한 코드가 어디가 문제였는지 알고 싶어 질문드립니다.
package Baekjoon;
import java.util.*;
class DSLR {
public int result;
public String command;
DSLR(int result, String command) {
this.result = result;
this.command = command;
}
}
public class _9019 {
static boolean[] ch = new boolean[10000];
static ArrayList<String> list = new ArrayList<>();
public void BFS(int input, int output) {
Arrays.fill(ch, false);
Queue<DSLR> q = new LinkedList<>();
q.offer(new DSLR(input, ""));
while(!q.isEmpty()) {
DSLR tmp = q.poll();
if (tmp.result == output) {
list.add(tmp.command);
break;
}
for (int i = 0; i < 4; i++) {
if(i == 0) {
int next_result = (tmp.result * 2) % 10000;
if (!ch[next_result]) {
String next_command = tmp.command + 'D';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
if (i == 1) {
int next_result = tmp.result - 1;
if (next_result == 0) next_result = 9999;
if (!ch[next_result]) {
String next_command = tmp.command + 'S';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
if (i == 2) {
int next_result = (tmp.result % 1000) * 10 + (tmp.result / 1000);
if (!ch[next_result]) {
String next_command = tmp.command + 'L';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
if (i == 3) {
int next_result = (tmp.result % 10) * 1000 + tmp.result / 10;
if (!ch[next_result]) {
String next_command = tmp.command + 'R';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
}
}
}
public static void main(String[] args) {
_9019 T = new _9019();
Scanner sc = new Scanner(System.in);
int test = sc.nextInt();
for (int i = 0; i < test; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
ch[a] = true;
T.BFS(a, b);
}
for(String x : list) {
System.out.println(x);
}
}
}
답변 1
0
안녕하세요^^
S 명령어에서 처리를 잘 못한 것 같습니다. 아래와 같이 하니 통과됩니다.
import java.util.*;
class DSLR {
public int result;
public String command;
DSLR(int result, String command) {
this.result = result;
this.command = command;
}
}
public class Main {
static boolean[] ch = new boolean[10000];
static ArrayList<String> list = new ArrayList<>();
public void BFS(int input, int output) {
Arrays.fill(ch, false);
Queue<DSLR> q = new LinkedList<>();
q.offer(new DSLR(input, ""));
while(!q.isEmpty()) {
DSLR tmp = q.poll();
if (tmp.result == output) {
list.add(tmp.command);
break;
}
for (int i = 0; i < 4; i++) {
if(i == 0) {
int next_result = (tmp.result * 2) % 10000;
if (!ch[next_result]) {
String next_command = tmp.command + 'D';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
if (i == 1) {
int next_result;
if (tmp.result == 0) next_result = 9999;
else next_result = tmp.result - 1;
if (!ch[next_result]) {
String next_command = tmp.command + 'S';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
if (i == 2) {
int next_result = (tmp.result % 1000) * 10 + (tmp.result / 1000);
if (!ch[next_result]) {
String next_command = tmp.command + 'L';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
if (i == 3) {
int next_result = (tmp.result % 10) * 1000 + tmp.result / 10;
if (!ch[next_result]) {
String next_command = tmp.command + 'R';
ch[next_result] = true;
q.offer(new DSLR(next_result, next_command));
}
}
}
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int test = sc.nextInt();
for (int i = 0; i < test; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
ch[a] = true;
T.BFS(a, b);
}
for(String x : list) {
System.out.println(x);
}
}
}
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
29
1
갑자기 채점 사이트가 바뀌었어요
0
32
1
문제 리스트 페이지
0
29
1
채점 사이트 관련 질문드립니다
0
24
1
봉우리 문제 질문입니다
0
81
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
65
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
45
1
강의 수강후 코딩테스트
0
111
1
answer 변수 사용 여부
0
46
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
44
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
62
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
56
1





