1. 문제
게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.
게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다.
(위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다.
모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다.
게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데,
이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다.
다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.
2 - 1. 나의 풀이
보기에 어려워 보인다.
하지만 2차원 배열 행과 열을 헷갈리지 않고 스택을 사용해 풀면 된다.
2 - 2. 나의 코드
package Stack_Queue;
import java.util.Scanner;
import java.util.Stack;
public class stack_03 {
public static int solution(int[][] boardArr, int n, int[] movesArr) {
int answer = 0;
Stack<Integer> num = new Stack<>();
num.push(0);
//크레인이 배열에서 집는 과정
for (int i = 0; i < movesArr.length; i++) {
int lift = movesArr[i] - 1;
for (int j = 0; j < n; j++) {
//격자판이 0이면 그 아래칸을 크레인으로 뽑고자한다.
if(boardArr[j][lift] > 0) {
//stack의 peek와 같은 인형일 경우 스택 pop (+ 격자판 인형도 제거)
if(boardArr[j][lift] == num.peek()) {
num.pop();
boardArr[j][lift] = 0; //이건 공통적인 부분이라서 위로 올려도 된다.
answer = answer + 2;
break;
}
//같은 인형이 아니면 격자판에 있는 걸 옮기고 stack에 푸쉬
num.push(boardArr[j][lift]);
boardArr[j][lift] =0; //이건 공통적인 부분이라서 위로 올려도 된다.
break;
}
if((boardArr[j][lift] == 0) && (j == n-1)) break;
}
}
return answer;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] boardArr=new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
boardArr[i][j] = sc.nextInt();
}
}
int m = sc.nextInt();
int[] movesArr = new int[m]; //크레인의 이동 경로
for (int i = 0; i < m; i++) {
movesArr[i] = sc.nextInt();
}
System.out.println(solution(boardArr, n, movesArr));
/*
for (int i = 0; i < n; i++ ) {
for (int j = 0; j < n; j++) {
System.out.print(boardArr[i][j] + " ");
}
System.out.println();
}
*/
}
}
3. 강의 풀이 및 코드
강의 풀이와 코드가 나와 별반 다를 바 없어서 생략한다!
4. 얻어갈 점, 기억할 Point
1. if에서 조건을 따질 때 조건 상관없이 무조건 이루어지는 과정은 바로 쓰는게 좋을듯! ex board[j][lift]=0;
2. 배열을 조회할 때는 배열의 크기에 벗어나지 않게 조심하자
'자바 알고리즘 문제풀이 > Stack, Queue(자료구조)' 카테고리의 다른 글
6. 공주 구하기 (1) | 2023.10.19 |
---|---|
5. 쇠막대기 (1) | 2023.10.19 |
4. 후위식 연산 (1) | 2023.10.19 |
2. 괄호문자제거 (0) | 2023.10.08 |
1. 올바른 괄호 (0) | 2023.10.08 |