알고리즘 문제 풀이

[프로그래머스] 크레인 인형뽑기 게임

v 2021. 3. 4. 16:07

programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

level2라고는 하지만 stack을 이용하고 적절한 분기처리를 해준다면 쉽게 풀 수 있다.

제일 위에 있는 것을 뽑는 과정에서 헤매긴 했다. ㅜㅜ

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;

        int length = board.length;
        Stack<Integer> stack = new Stack<Integer>();
        
        for (int i = 0; i < moves.length; i++) {
        	//선택된 세로기준 라인(0부터 시작하기 때문에 -1을 빼서 배열과 같게 해줌)
			int col = moves[i]-1;
			int row  = 0;//제일 위에 있는 것 찾기.
           	boolean flag = false;//비어있는 지 확인(에러 방지)
			for (int j = 0; j < length; j++) {
				if(board[j][col]!=0) {
					row= j;
                    flag = true;
					break;
				}
                
			}
            if(!flag) break;
	
			int temp = board[row][col];
			board[row][col] = 0;//뽑았다는 의미로 0으로 초기화
        
        	//stack이 비어있지 않고, 뽑은 것과 제일 위가 같다면 제거하고 카운트 증가.
			if(!stack.isEmpty()&&stack.peek() == temp) {
				stack.pop();
				answer+=2;
			}else { //stack이 비어있거나, 뽑은 것과 제일 위가 다르다면 stack에 값 넣기.
				stack.add(temp);
			}
		}

        return answer;
    }
}
반응형