알고리즘 문제/프로그래머스
[프로그래머스 - Java] 크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴쉽)
건복치
2020. 4. 29. 18:22
반응형
링크
https://programmers.co.kr/learn/courses/30/lessons/64061
처음 코드
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int[][] temp = board;
int answer = 0;
Stack<Integer> st = new Stack<Integer>();
for(int i = 0; i < moves.length; i++) {
for(int j = 0; j < board.length; j++) {
int n = temp[j][moves[i]-1];
if(n != 0) {
st.push(n);
temp[j][moves[i]-1] = 0;
break;
}
}
//같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 된 경우 검사
//스택에서 같은지 안 같은지 검사하기
if(st.size() >= 2) {
int n1 = st.pop();
int n2 = st.pop();
if(n1 == n2) {
answer += 2;
} else {
st.push(n2);
st.push(n1);
}
}
}
return answer;
}
}
수정 코드
temp는 필요없음
크레인이 인형을 집었을 때 바로 스택이랑 검사
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> st = new Stack<Integer>();
for(int i = 0; i < moves.length; i++) {
for(int j = 0; j < board.length; j++) {
int n = board[j][moves[i]-1];
if(n != 0) {
if(st.isEmpty()) {
st.push(n);
board[j][moves[i]-1] = 0;
break;
}
if(st.peek() == n) {
st.pop();
answer += 2;
} else {
st.push(n);
}
board[j][moves[i]-1] = 0;
break;
}
}
}
return answer;
}
}
반응형