본문 바로가기
Algorithm/Programmers

Programmers - 크레인 인형뽑기 게임

by HaningYa 2020. 4. 10.
728x90

 

[문제]

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제

프로그래머스 참조


문제의 그림에 스택을 쓰라고 나와인는 듯 하다.

 

처음에 조금 까다로웠던 건 2차원 int[][] 배열에서 moves 에 있는 해당 줄의 인형을 뽑는 부분 이였다.

 

loop를 돌아가며 몇번 출력을 해보고 어떻게 배열의 index 를 잡을지 감이왔다.

(컴퓨팅 사고가 부족하다)

 

그것만 처리하면 stack에서 같은 인형이 있으면 score 올리는건 쉽다.

 

코드가 긴게 함정이다.

import java.util.*;
class Solution {
    int[][] array;
    Stack<Integer> stack = new Stack();
    int answer = 0;
    
    public int solution(int[][] board, int[] moves) {
        array = board;
        // printArray();

        for(int move : moves){
            pick(move);
            checkScore();
        }
        // System.out.println("");
        // printArray();
        // printStack();
        
        return answer;
    }
    public void checkScore(){
        if(stack.size() > 1){
            int pop = stack.pop();
            int peek = stack.peek();
            if (peek == pop){
                answer = answer + 2;
                stack.pop();
            }else{
                stack.push(pop);
            } 
        }
    }
    public void pick(int col){
        // col 이 1 이면 
        loop:
        for(int i = 0 ; i < array.length ; i++){
            int[] row = array[i];
            for(int j = 0 ; j < row.length ; j++){
                int item = row[j];
                if(j == col-1){
                    if(item != 0){
                        array[i][j] = 0;
                        stack.push(item);
                        // printArray();
                        break loop;
                    }

                }// end of if
            }// end of j loop
        }//end of i loop
    }
    public void printArray(){
        for(int[] row : array){
            System.out.println("");
            for(int item : row){
                System.out.print(item);
            }
        } 
        System.out.println("");
    }
    public void printStack(){
        System.out.println(Arrays.toString(stack.toArray()));
    }
}
728x90

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

Programmers - 프린터  (0) 2020.05.15
Programmers - [1차] 프렌즈4블록  (0) 2020.05.08
Programmers - 문자열 압축  (0) 2020.05.08
Programmers - 체육복  (0) 2020.04.11
Programmers - 이분탐색.예산  (0) 2020.04.07

댓글