본문 바로가기
알고리즘 문제/프로그래머스

[프로그래머스 - Java] 크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴쉽)

by 건복치 2020. 4. 29.
반응형

링크

https://programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

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

programmers.co.kr

처음 코드

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;
    }
}
반응형

댓글