강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김동현님의 프로필 이미지
김동현

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

3. 크레인 인형뽑기

코드 확인 좀 부탁드립니다 ㅠㅠ

작성

·

295

0


import java.util.*;

public class Main {
public int solution(int[][] arr, int[] arr2){
Stack<Integer> stack = new Stack<>();
int cnt = 0;
stack.push(0);
for(int x : arr2){ // 1 5 3 5 1 2 1 4
for(int i = 0; i < arr2.length; i++){ // 01 11 21 31 41
if(arr[i][x] > 0){
int a = arr[i][x];
if(a == stack.peek()){
stack.pop();
cnt++;
}
else
stack.push(a);
arr[i][x] = 0;
break;
}
}
}
return cnt * 2;
}
public static void main(String[] args) {
Main t = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[][] arr = new int[n][n];
for(int i =0; i < n; i++){
for(int j = 0; j < n; j++) {
arr[i][j] = kb.nextInt();
}
}
int m = kb.nextInt();
int[] arr2 = new int[m];
for(int i = 0; i < m; m++){
arr2[i] = kb.nextInt() - 1;
}

System.out.println(t.solution(arr, arr2));
}
}

이렇게 코드를 작성해보았는데 런타임 에러가 뜨네요 ㅠㅠ 코드에
어느 부분이 문제가 있는지 잚 모르겠어서 질문 남깁니다!


*/


답변 1

0

제가 코드를 실행시켜보지는 못해서 부족하지만 조금이라도 도움이 되셨으면 좋겠습니다.
1. 문제는 board판에서 숫자를 찾아 바구니에 넣어야 하기 때문에 두 번째 반복문의 범위 = board의 길이여야 합니다.  따라서 arr2.length -> arr.length로 변경하셔야 합니다.

2. moves 배열에 담겨져 있는 인자들은 1부터 시작하고 최대 board판의 길이까지 담겨있습니다. 그러나 배열은 0부터 시작해서 길이 - 1까지 담겨져 있습니다. 따라서 moves의 값 x 그 자체가 아닌 x - 1을 하여야 배열에 인덱스에 맞게 들어갑니다. 

처음에 0을 넣는 것, 카운트를 1씩 더하고 추후에 *2를 하는 거에 대해서는 아마 상관없을 것 같습니다만 혹시나 위의 2가지를 해결하고 난 후에도 문제가 생기신다면 강사님의 코드와 동일하게 수정해보시는 건 어떠신 지 말씀드려봅니다. 

김동현님의 프로필 이미지
김동현

작성한 질문수

질문하기