본문 바로가기
Programmers/Lv.1

[프로그래머스] Lv.1 크레인 인형뽑기 JAVA 풀이

by Poorm 푸름 2023. 10. 2.

문제 Lv.1 크레인 인형뽑기

 

 :  게임화면 = N × N

    격자 아래부터 차곡차곡 쌓여있음

    크레인 위치를 좌우로 옮겨 가장 위에 있는 인형 집어올려 바구니에 넣는다

    바구니에 같은 모양의 인형이 두 개 만나면 터져서 없어진다

    (바구니는 모든 인형이 다 들어갈 수 있는 여유로운 크기이다)

 

 

 

[예시문제]

: 격자 = 2차원 배열 board, 크레인 위치 = moves

 

:  board = [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]

 

:  moves = [1,5,3,5,1,2,1,4] 

 

:  result = 4

 

: 바구니 = [4,3,1,1,3,2,4]

 

 

[코드]

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        Stack<Integer> s = new Stack<>();
        int result = 0;
        for(int i =0; i<moves.length;i++){
            for(int j =0; j<board.length;j++){
                if(board[j][moves[i]-1]!=0){
                    if(!s.empty() && s.peek() == board[j][moves[i]-1]){
                        result ++;
                        s.pop();
                        board[j][moves[i]-1] = 0;
                        break;
                    }
                    else{
                        s.push(board[j][moves[i]-1]);
                        board[j][moves[i]-1]=0;
                        break;
                    }
                }
            }
        }
        return result*2;
  
    }
}

 

 :  Stack<Integer> s = new Stack<>(); 스택 설정
 

 :  int result = 0; 결과 설정


 :  for(int i =0; i<moves.length;i++){  크레인 위치가 board 열 위치를 나타낸다 (몇번째 열인지 파악 가능)
          for(int j =0; j<board.length;j++){  board 행을 j를 이용해 순차적으로 계산
                if(board[j][moves[i]-1]!=0){  board j행 moves의 열 / 다만 moves 값은 1부터 시작하지만
                                                           board의 열은 0번부터 시작하므로 moves[i]에서 -1 해준다
                     if(!s.empty() && s.peek() == board[j][moves[i]-1]){  스택 peek 값 = board의 데이터값
                         result ++;  결과 + 1해주고
                         s.pop();  해당 peek는 스택에서 빼기
                         board[j][moves[i]-1] = 0;  해당 board 값은 0으로 수정
                        break;
                    }
                    else{  스택이 비어있거나 스택의 peek 값과 board의 데이터 값이 다르다면
                        s.push(board[j][moves[i]-1]);  해당 board값을 스택에 넣어준다
                        board[j][moves[i]-1]=0;  board는 0으로 정정
                        break;
                    }
                }
            }
        }


 :  return result*2;  result는 한쌍을 의미한다 그래서 ×2 해주기

 

 


  

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

 

프로그래머스

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

programmers.co.kr

 

 

* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *