[알고리즘] 인프런 - 크레인 인형뽑기

정은아·2024년 1월 11일
post-thumbnail

인프런 - 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- Section 5 - 크레인 인형뽑기 문제

내 풀이

import java.util.Scanner;
import java.util.Stack;

public class Stack_03 {
	public static void main(String[] args) {
		
		// 인형뽑기 문제
		
		// 1. 테스트케이스 int를 받아온다.
		// 2. 이차원 배열을 만든다.
		// 3. 테스트케이스 int를 받아온다.
		// 4. 배열을 만들어 값을 채운다.
		// 5. 답을 출력할 answer 변수를 만든다.
		// 6. stack을 만든다.
		// 7. forEach문을 돌려 값을 채운다.
		// 8. 그 안에 for문을 돌려 0이 아니라면 인형을 꺼내온다.
		// 9. 뽑아온 인형과 stack에 저장된 인형이 같다면 pop한다.
		// 10. 뽑아왔으니까 그 자리는 0으로 변경한다.
		// 11. stack이 비어있지 않고 같이 제거해줬다면 answer에 +2한다.
		
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int [][] board = new int[n][n];
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				board[i][j] = sc.nextInt();
			}
		}
		
		int a = sc.nextInt();
		int [] moves = new int [a];
		
		for (int i = 0; i < a; i++) {
			moves[i] = sc.nextInt();
		}
		
		int answer = 0;
		
		Stack<Integer> stack = new Stack<>();
		
		for (Integer pos : moves) {
			for (int i = 0; i < board.length; i++) {
				if (board[i][pos-1] != 0) {
					int tmp = board[i][pos-1];
					board[i][pos-1] = 0;
					if (!stack.isEmpty() && tmp == stack.peek()) {
						answer += 2;
						stack.pop();
					}else {
						stack.push(tmp);
					}
					break;
				}
			}
		}
		
		System.out.println(answer);
		
	}
}

느낀점

졸면서 풀었더니 잘 집중이 안된다.. 같은 캐릭터 2개가 만나서 터지니까(pop) answer +=2 해주는것도 알았다. 가장 큰 수확은 stack.peek(); 메서드를 배웠다는 점이다!
stack.pop();은 꺼내고 가져오는건데 stack.peek();은 가장 위에 있는 것을 가져오기만 한다.

stack.peek();에 대해 알아보자

  • Java에서 stack.peek() 메서드는 Vector 클래스의 하위 클래스이자 객체의 LIFO(후입선출) 스택을 나타내는 Stack 클래스의 일부입니다.
    peek() 메서드는 스택의 맨 위에 있는 요소를 제거하지 않고 검색하는 데 사용됩니다. 어떤 방식으로든 스택을 수정하지 않습니다.
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글