th42500의 TIL

[Java] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 본문

Algorithm/Programmers

[Java] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임

th42500 2022. 3. 24. 23:34

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

 

알고리즘을 공부하기 전에는 풀지 못했던 어려웠던 문제인데, 지금은 20분도 안걸려서 풀어내는 쉬운 문제가 되어 버렸다. 

 

✔ 입출력 예시

크레인 인형뽑기 게임 예시

 

 

💡 포인트

1️⃣ 게임화면에서 크레인이 움직이는 위치는 1번부터 시작

2️⃣ 인형이 없는 곳(0)에서는 크레인을 작동시켜도 아무런 일도 일어나지 ❌

3️⃣ 사라지는 인형은 크레인으로 들어올린 인형과 바구니 제일 상단 위에 있는 인형 2개

 

 

❓ 풀이과정

1️⃣ 이중 for문을 이용하여 밖의 for문으로는 moves를 순회하도록, 안의 for문으로는 board의 [moves[i]]열을 순회

2️⃣ 1️⃣의 순환 과정 중 인형(0이 아닌 수)이 크레인에 잡힌다면 안의 for문 break

3️⃣ 2️⃣에서 선택된 인형이 stack의 최상단과 일치한다면 pop(), 아니라면 push()

4️⃣ pop()할 때는 선택된 인형stack의 최상단의 인형 모두 사라짐

 

 

✔ 소스코드

import java.util.Arrays;
import java.util.Stack;

public class Solution {  // 크레인 인형뽑기 게임

	public static void main(String[] args) {
		int[][] 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}};
		int[] moves = {1, 5, 3, 5, 1, 2, 1, 4};
		
		System.out.println(solution(board, moves));
	}

	private static int solution(int[][] board, int[] moves) {
		int answer = 0;  // 사라진 인형 수
		
		Stack<Integer> bucket = new Stack<>();
		
		for (int i = 0; i < moves.length; i++) {
			int select = 0;
			for (int j = 0; j < board.length; j++) {
				if(board[j][moves[i]-1] != 0) {
					select = board[j][moves[i]-1];
					board[j][moves[i]-1] = 0;
					break;
				}
			}
			
			
			if(!bucket.isEmpty() && select == bucket.peek()) {
				bucket.pop();
				answer+=2;
			}else if(select != 0){
				System.out.println(select + "push");
				bucket.push(select);
			}
            
			// 확인
			for (int j = 0; j < board.length; j++) {
				System.out.println(Arrays.toString(board[j]));
			}
			System.out.println("----------------------------------");
			System.out.println(bucket);
			System.out.println(answer);
			System.out.println("==================================");
		}
		
		return answer;
	}

}

 

크레인과 stack이 모두 잘 작동하는지 확인하기 위해 출력해보았다.

 

✨ 확인 결과

위와 같이 잘 작동하는 것을 확인할 수 있다 😀

Comments