-
[프로그래머스 / JAVA] 크레인 인형뽑기 게임 (정답 풀이)코딩/코테준비(JAVA) 2025. 2. 6. 20:00
자바 공부와 코딩테스트 준비를 병행할 겸 자바로 코테 준비를 며칠 전 시작했다.
막히거나 틀린 부분이 있더라도, 그냥 그대로 내가 스스로 작성한 부분들을 기록해 두려고 한다.
그냥 미래의 복기용으로 나를 위해 적어둔 기록이다.
(이 사람은 어떻게 실패하거나 성공했는지 살펴보는 용도로도 적합할 것 같다.)
구현 아이디어는 쉽게 떠올릴 수 있으나, 조건에 따른 예외 처리가 중요한 문제였다.
바구니가 비었을 때와 차 있을 때를 구분해줘야 하고, 바구니 맨 위에 올라가 있는 인형이 뽑힌 인형과 서로 같은지 다른 지도 구분해줘야 한다.
board의 각 열을 스택으로 만들어 board를 stack의 배열로 바꾸어서 푸는 방법도 존재하나, 나는 그냥 board 배열의 꼭대기 행부터 아래로 내려오면서 검사하는 방식으로 구현했다.
import java.util.Stack; import java.util.Arrays; class Solution { public int solution(int[][] board, int[] moves) { int col = board[0].length; int row = board.length; int popNum = 0; // 터뜨려진 인형 개수 Stack<Integer> stack = new Stack<>(); // 스택 // System.out.println(col + " " + row); // System.out.println(Arrays.deepToString(board)); for (int i = 0; i < moves.length; i++) { int c = moves[i] - 1; // 선택된 열(1부터시작하는걸 0부터로 변환) int foundDoll = 0; // 이전에 뽑혔던 인형 기록을 0으로 초기화해줘야함 for (int j = 0; j < row; j++) { // 보드의 윗행부터 아래로 인형이 있나 탐색 if(board[j][c] != 0) { // 인형을 집었을때 foundDoll = board[j][c]; board[j][c] = 0; // 보드격자 빈칸으로 바꿔주기 //스택 맨 위랑 뽑은 인형이랑 같은지 비교 if(!stack.isEmpty()) { // stack 비었는데 뽑으면 예외 발생함 if(stack.peek() == foundDoll) { // 두개 연속 쌓일 상황이면 stack.pop(); popNum += 2; } else { // 다른 인형이 바구니에 있었으면 stack.push(foundDoll); // 바구니에 인형 집어넣기 } } else { //바구니가 비어있으면 stack.push(foundDoll); // 바구니에 인형 집어넣기 } break; } } } return popNum; } }
하루에 한 문제 이상 꾸준히 풀자.
실수는 많이 할수록, 더 많이 배울 수 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/64061
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'코딩 > 코테준비(JAVA)' 카테고리의 다른 글
[프로그래머스 / JAVA] 카드 뭉치 (정답 풀이) (0) 2025.02.12 [프로그래머스 / JAVA] 기능개발 (정답풀이) (0) 2025.02.12 [프로그래머스 / JAVA] 주식 가격 (정답 풀이) (1) 2025.02.02 [프로그래머스 / JAVA] 짝지어 제거하기 (정답 코드) (0) 2025.02.01 [프로그래머스 / JAVA] 올바른 괄호 (정답 코드) (1) 2025.01.31