2차원 배열 board[행][열]
moves 배열의 pos는 board의 열에 속한다. 하지만 borad의 인덱스 번호가 0부터 시작이므로
board[ ][pos-1]이 되어야한다. 그래야 pos가 1일 때 0번열을 탐색할 수 있다.
for문을 돌려 board[i][pos-1] 탐색하여 인형을 발견하면 인형을 꺼내 스택에 넣는다. 인형을 꺼내면 0으로 변경한다.
이후 for문은 계속 돌면 안된다. (break 주의)
peek()는 스택에서 값을 가져오기만 하고 pop()은 스택에서 아예 꺼내서 값을 가져온다.
import java.util.*;
public class Main {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> stack = new Stack<>();
for (int pos : moves) { //pos : 크레인의 위치
for (int i = 0; i < board.length; i++) { //board.length : 행크기
if (board[i][pos - 1] != 0) {
int tmp = board[i][pos-1];//인형 번호
board[i][pos-1] =0; //인형 가져왔으니까 0으로 변경
//스택 상단 인형과 비교
if(!stack.isEmpty() && tmp==stack.peek()){//바구니에 인형이 있거나 인형이 같으면
answer += 2;
stack.pop();
} else stack.push(tmp);
break;
}
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[][] board = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
board[i][j] = kb.nextInt(); //board에 인형들 받음
}
}
int m = kb.nextInt();
int[] moves=new int[m];
for (int i = 0; i < m; i++) {
moves[i]=kb.nextInt();
}
System.out.println(T.solution(board, moves));
}
}
'Algorithm > 문제' 카테고리의 다른 글
40. 쇠막대기 (1) | 2023.10.10 |
---|---|
39. 후위식 연산(postfix) (0) | 2023.09.25 |
37. 괄호 문자 제거 (0) | 2023.09.20 |
36. 올바른 괄호 (Stack) (0) | 2023.09.11 |
35. K번째 큰 수 (TreeSet) (0) | 2023.09.06 |