코딩 테스트/프로그래머스

[ 프로그래머스 - java ] 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십)

snow_hong 2022. 3. 22. 12:47

문제 설명
크레인을 작동하면 해당 라인의 가장 상위에 있는 인형이 무조건 뽑히고, (만약 해당 라인에 인형이 하나도 없으면 아무것도 뽑지 않는다)

인형은 바구니에 담는다. 이 때 인형이 연속으로 2개 있으면 터져서 사라진다.

뽑기판 board이 주어지고 뽑는 라인의 순서인 moves이 주어질 때,

터져서 사라진 인형의 갯수를 구해야한다.


[ 풀이 ]

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        
    Stack<Integer> stack = new Stack<>();
    stack.push(0); //0을 넣는 이유는 stack의 맨 위 값과 비교(없으면 에러)

    for (int move : moves) {
      for (int j = 0; j < board.length; j++) {
       
        if (board[j][move - 1] != 0) {

          if (stack.peek() == board[j][move - 1]) { 
           // 같다면 인형이 터짐
            stack.pop();
            answer += 2;
          } else {
           stack.push(board[j][move - 1]);
          }
          board[j][move - 1] = 0;
          break;
        }

      }

    }
    return answer;
    }
}

[ 코드 풀이 ]

◎ Stack (스택)

- 먼저 들어간 자료가 나중에 나오는게 특징 ( LIFO동작 )

- java.util.Stack클래스를 통해 스택 동작 제공

- 선언 : Stack<String> a = new Stack<>();

- 추가 : push(값)

- 최상단 값 삭제 : pop()

- 최상단 값 확인 : peek()

- 모든 데이터 삭제 : clear()

- 스택이 비어있는지 확인 : empty() 비어있다면 true 아니면 false

- 특정 데이터가 포함되어 있는지 확인 : contains(값) 값이 있다면 true 아니면 false

import java.util.Stack;

public class StackExample {

	public static void main(String[] args) {

		Stack<String> stack = new Stack<>();

		// Stack에 데이터 추가
		stack.push("Data1");
		stack.push("Data2");
		stack.push("Data3");

		// Stack에서 데이터 꺼내기
		System.out.println(stack.pop());

		// Stack의 최상단 값 출력(제거하지 않음)
		System.out.println(stack.peek());

		// Stack에서 데이터 꺼내기
		System.out.println(stack.pop());
      
        //Stack에서 값이 있는지 확인
        System.out.println( stack.contains("Data1") ); // true

        //Stack에 있는 모든 데이터 삭제
        stack.clear();

       //Stack에 값이 비어있는지 확인
        System.out.println( stack.empty() ); //true
	}
}

728x90