코딩 테스트/프로그래머스
[ 프로그래머스 - 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