[프로그래머스] 크레인 인형 뽑기 게임 - 64061 (Java)

2024. 11. 29. 19:36·알고리즘/Java
반응형

문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/64061

나의 코드

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        for(int move : moves){
            for(int i = 0; i < board[0].length; i++){
                int num = board[i][move - 1];
                if(num > 0){
                    board[i][move - 1] = 0;
                    if(stack.isEmpty()){
                        stack.push(num);
                    }else{
                         if(num == stack.peek()){
                            stack.pop();
                            answer += 2;
                        }else{
                             stack.push(num);
                         }
                    }
                    break;
                }
            }
        }
        return answer;
    }
}

개선 코드(각 열에 대한 스택을 생성)

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        
        // 1. 각 열을 스택으로 변환
        List<Stack<Integer>> columns = new ArrayList<>();
        for (int j = 0; j < board[0].length; j++) {
            Stack<Integer> columnStack = new Stack<>();
            for (int i = board.length - 1; i >= 0; i--) {
                if (board[i][j] > 0) {
                    columnStack.push(board[i][j]);
                }
            }
            columns.add(columnStack);
        }

        // 2. moves 처리
        for (int move : moves) {
            Stack<Integer> column = columns.get(move - 1);
            if (!column.isEmpty()) {
                int num = column.pop();
                if (!stack.isEmpty() && stack.peek() == num) {
                    stack.pop();
                    answer += 2;
                } else {
                    stack.push(num);
                }
            }
        }

        return answer;
    }
}

각 열에 대한 스택을 생성하여 탐색 시간을 줄인 방식입니다.


알게 된 점

Stack 배열 초기화

Stack 배열을 선언한 후, 각 배열 요소에 Stack 객체를 초기화해야 사용 가능합니다. 초기화하지 않고 접근하려고 하면 NullPointerException이 발생합니다.

예제

// 1. Stack 배열 선언
Stack<Integer>[] stacks = new Stack[5];

// 2. 초기화하지 않고 값을 추가
stacks[0].push(1); // NullPointerException 발생!

해결 방법

// 1. Stack 배열 선언
Stack<Integer>[] stacks = new Stack[5];

// 2. 배열의 각 인덱스를 초기화
for (int i = 0; i < stacks.length; i++) {
    stacks[i] = new Stack<>(); // Stack 객체 생성
}

// 3. 값 추가
stacks[0].push(1); // 정상 동작
반응형

'알고리즘 > Java' 카테고리의 다른 글

[프로그래머스] 같은 숫자는 싫어 - 12906 (Java)  (0) 2024.12.17
[프로그래머스] 표 편집 - 81303 (Java)  (0) 2024.12.13
[프로그래머스] 주식가격 - 42584(Java)  (0) 2024.11.29
[프로그래머스] 괄호 회전하기 - 76502(Java)  (0) 2024.11.26
[프로그래머스] 짝지어 제거하기 - 12973 (Java)  (0) 2024.11.26
'알고리즘/Java' 카테고리의 다른 글
  • [프로그래머스] 같은 숫자는 싫어 - 12906 (Java)
  • [프로그래머스] 표 편집 - 81303 (Java)
  • [프로그래머스] 주식가격 - 42584(Java)
  • [프로그래머스] 괄호 회전하기 - 76502(Java)
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (253)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (70)
        • Spring Project (27)
        • Java (21)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (23)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (9)
      • Database (16)
        • Oracle (10)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1차원 배열
    백준 자바
    백준
    github
    for문
    BOJ
    배열
    Git
    문자열
    solved.ac
    구현
    알고리즘
    spring
    springboot
    백준알고리즘
    Oracle
    java
    오라클
    단계별풀기
    jpa
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[프로그래머스] 크레인 인형 뽑기 게임 - 64061 (Java)
상단으로

티스토리툴바