프로그래머스 | 크레인 인형뽑기 게임 (Java)

mul·2023년 2월 13일
0

알고리즘

목록 보기
19/65
post-custom-banner

🔒 문제

프로그래머스 코딩테스트 연습 Lv1. 2019 카카오 개발자 겨울 인턴십 크레인 인형뽑기 게임

🔑 해결

게임 화면의 격자 상태가 담긴 2차원 배열 board와 인형을 잡기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return하는 solution 함수를 작성하는 문제이다.

집은 인형을 넣을 바구니(basket)를 ArrayList로 생성해서 moves에 저장된 위치에서 가장 높은 곳에 위치한 인형을 basket에 넣는다. 방금 넣은 인형과 직전에 넣은 인형이 같으면 인형이 터지므로, answer에 +2를 한 뒤 바구니에서 인형을 삭제(remove)한다.

  1. 집은 인형을 넣을 바구니(basket)를 ArrayList로 생성.
  2. moves에 저장된 위치는 2차원 배열 board의 y좌표 +1된 값이다. 정수형 변수 m을 선언하여 moves[i]-1을 저장한다.
  3. for문을 통해 x좌표를 0부터 탐색하여 가장 높은 곳에 위치한(board[j][m] != 0) 인형을 찾는다.
    3-1. m위치에 가장 높은 곳에 위치한 인형을 찾았다면 바구니(basket)에 add한 뒤, board[j][m]에 저장된 값을 0으로 초기화한 뒤, 다음 m위치를 탐색하기 위해 break
  4. basket에 있는 인형이 2개 이상일 때, 방금 바구니에 넣은 인형(l1)이 직전에 넣은 인형(l2)과 만나 터지는지 확인한다.
    4-1. l1과 l2가 같다면 터지므로 answer에 +2를 한 뒤 basket에서 삭제한다.

🔓 코드

import java.util.ArrayList;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        
        ArrayList<Integer> basket = new ArrayList<>();
        for (int i = 0; i < moves.length; i++) {
        	// 바구니에 인형 넣기
        	int m = moves[i] - 1;
        	for (int j = 0; j < board.length; j++) {
				if (board[j][m] != 0) {
					basket.add(board[j][m]);
					board[j][m] = 0;
					break;
				}
			}
        	// 바구니에 인형을 넣었을 때 터지는지 확인
        	int l1 = basket.size() - 1;
        	int l2 = basket.size() - 2;
        	if(basket.size() > 1 && basket.get(l1) == basket.get(l2)) {
        		answer += 2;
        		basket.remove(l1);
        		basket.remove(l2);
        	}
        } 
        
        return answer;
    }
}
post-custom-banner

0개의 댓글