코진남

프로그래머스 크레인 문제 본문

코딩테스트

프로그래머스 크레인 문제

woojin126 2022. 3. 22. 18:41
import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
            
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        
        for(int move : moves) {
            for(int i = 0 ; i < board.length; i++) {
                if(board[i][move - 1] != 0) {
                    if(stack.isEmpty()) {
                        stack.push(board[i][move - 1]);
                        board[i][move - 1] = 0;
                        break;
                    }
                    
                    if(board[i][move - 1] == stack.peek()) {
                        stack.pop();
                        answer+=2;
                    }else
                        stack.push(board[i][move-1]);
                    board[i][move - 1] = 0;
                    break;
                }
            }
        }
        return answer;
    }
}

1. moves 를 (열) 이라고 생각하자.

2. Stack.isEmpty() 를 조건문으로 사용한 이유는 가장 처음에는 아무 값이 없을테니

값 하나를 처음에 넣어주고 해당 for문을 빠져나오도록, break 해준다. (스택에 쌓인 이전 값과 비교를 해야하기 때문에 값이 1개 이상 필수 ) 스택이 비어있을 때 값을 하나 이상되도록 넣어주고 빠져나온다.

3. 나머지 코드들은 보면 이해가능 할것.