본문 바로가기
알고리즘/Programmers

[Programmers] 크레인 인형뽑기 게임

by 소꿍 2020. 9. 27.

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 배웠다.. 잘 정리해야지

댓글