알고리즘/Programmers
[Programmers] 크레인 인형뽑기 게임
소꿍
2020. 9. 27. 00:50
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
Java
List로 작성한 코드
import java.util.ArrayList;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0; //사라진 인형 수
ArrayList<Integer> list = new ArrayList<>(); //list 생성
//for문으로 제일 위에 있는 값(뽑을 인형)을 list에 저장
for(int i = 0; i < moves.length; i++) {
int num = 0;
for(int j = 0; j <board.length; j++) {
num = board[j][moves[i]-1];
if(num != 0) {
list.add(num);
board[j][moves[i]-1] = 0;
break;
}
}
}
for(int i = 0; i < list.size(); i++) {
if(i != list.size()-1) {
int cur = list.get(i);
int next = list.get(i + 1);
//연속된 같은 값이 존재하면 answer에 2 추가하고 해당 인덱스값(2개) 삭제
if(cur == next) {
answer += 2;
list.remove(i);
list.remove(i);
i = -1;
}
}
}
return answer;
}
}
Stack으로 작성한 코드
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Solution {
public static int solution(int[][] board, int[] moves) {
int answer = 0;
// 배열 재정리
List<Stack<Integer>> new_board = new ArrayList<>();
for (int i=0; i<board.length; ++i) {
Stack<Integer> stack = new Stack<>();
for (int j=board.length-1; j>=0; --j) {
if (board[j][i] != 0)
stack.push(board[j][i]);
}
new_board.add(stack);
}
// simulate
Stack<Integer> bucket = new Stack<Integer>();
for (int i=0; i<moves.length; ++i) {
answer += _step(new_board, moves[i], bucket);
}
return answer;
}
private static int _step(List<Stack<Integer>> new_board, int move, Stack<Integer> bucket) {
move -= 1;
// pick one
Stack<Integer> stack = new_board.get(move);
if (stack.empty()) {
return 0;
}
int picked = stack.pop();
// put
// empty bucket or not matched
if (bucket.empty() || picked != bucket.peek()) {
bucket.push(picked);
return 0;
} else {
bucket.pop();
return 2;
}
}
}
오늘 Stack 배웠다.. 잘 정리해야지