본문 바로가기

CS/Algorithm

크레인 인형뽑기 게임

반응형

https://programmers.co.kr/learn/courses/30/lessons/64061?language=java

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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

 

1. 첫번째 풀이<ArrayList로 풀이>

import java.util.ArrayList;

class Solution {
    public int solution(int[][] board, int[] moves) 
    {
        int answer = 0;

        ArrayList<Integer> arr = new ArrayList<>();

        int n = board[0].length;
        for(int i = 0; i < moves.length; i++)
        {
            int row = moves[i]-1;
            for(int j = 0; j < n; j++)
            {
                int value = board[j][row];
                if(value == 0)
                {
                    continue;
                } else {
                    arr.add(value);
                    board[j][row] = 0;
                    break;
                }
            }
        }

        for (int i = 0; i<arr.size(); i++)
        {
            if(i < 0)
            {
                i = 0;
            }
            int next = i+1;
            if (next >= arr.size())
            {
                break;
            }
            int prevValue = arr.get(i);
            int nextValue = arr.get(next);
            if (prevValue == nextValue)
            {
                answer+=2;
                arr.remove(next);
                arr.remove(i);
                i-=2;
            }
        }


        return answer;
    }
}

 

난 스택이든 큐든 다 ArrayList로 풀려고 하는게 단점인것같다;

문제는 풀긴 풀었는데 출제자 의도를 집어내지 못했으므로 다시 풀어보았다.

 

2. 두번째 풀이<Stack으로 풀이>

import java.util.Stack;
import java.util.ArrayList;

class Solution {
    public int solution(int[][] board, int[] moves) 
    {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();

        for(int i = 0; i < moves.length; i++)
        {
            int row = moves[i]-1;
            for(int j = 0; j < board.length; j++)
            {
                int value = board[j][row];
                if(value == 0)
                {
                    continue;
                }
                if (stack.isEmpty())
                {
                    stack.push(value);
                } else {
                    if (stack.peek() == value)
                    {
                        stack.pop();
                        answer+=2;
                    } else {
                        stack.push(value);
                    }
                }
                board[j][row] = 0;
                break;
            }
        }
        return answer;
    }
}

 

 

 

반응형

'CS > Algorithm' 카테고리의 다른 글

완주하지 못한 선수  (0) 2021.04.30
뉴스 클러스터링  (0) 2021.04.29
삽입, 선택, 버블 정렬  (0) 2021.04.15
탐색 알고리즘 (DFS)  (0) 2020.12.22
왕실의 나이트  (0) 2020.12.21