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이 모두 잘 작동하는지 확인하기 위해 출력해보았다.
✨ 확인 결과
위와 같이 잘 작동하는 것을 확인할 수 있다 😀