https://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
문제 : 게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요. 문제 풀이 : Stack을 활용해서 풀었습니다. moves 배열만큼 돌면서 해당하는 숫자 번호를 board 인덱스로 사용해 스택에 넣어주었습니다. 1. 스택이 비어있으면 board 숫자를 넣어주고, 2. 그렇지 않으면 스택의 마지막 요소를 확인합니다. 2-1. 이때 같으면 스택에서 마지막 요소를 제거해주고 터진 인형 개수를 세줍니다. 2-2. 같지 않으면 스택에 추가해줍니다. 마지막으로 스택에 넣은 board 숫자는 0으로 만들어줍니다. 몰랐던 점 : 한 번에 처리하려고 하지말자. |
import java.util.Stack;
class Solution {
static Stack<Integer> stack = new Stack();
static int answer = 0;
static int remember = 0, last = 0;
public int solution(int[][] board, int[] moves) {
for (int i = 0; i < moves.length; i++) {
for (int j = 0; j < board.length; j++) {
int x = board[j][moves[i] - 1];
if (x != 0) {
if (stack.isEmpty()) {//스택이 비어있으면 추가
stack.add(x);
} else {//스택이 비어있지 않으면
if (stack.peek() == x) {//마지막 요소를 확인해서 x 와 같으면
stack.pop();//마지막 요소 제거
answer += 2;//터트린 인형 개수 세주기
} else {//마지막 요소와 다르다면
stack.add(x);//스택에 추가
}
}
board[j][moves[i] - 1] = 0;
break;
}
}
}
System.out.println(answer);
return answer;
}
}
'ALGORITHM > 프로그래머스 | 백준 | 삼성 | 카카오' 카테고리의 다른 글
[백준] 2668번 숫자고르기 (0) | 2020.08.26 |
---|---|
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 비밀지도 (0) | 2020.08.25 |
[백준] 1764번 듣보잡 (0) | 2020.08.23 |
[백준] 1157번 단어 공부 (0) | 2020.08.23 |
[백준] 10808번 알파벳 개수 (0) | 2020.08.23 |