프로그래머스 택배 상자 꺼내기 JAVA 풀이 (2025 코드 챌린지)

2026. 7. 7. 21:15·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 문제 개요

창고에 택배 상자를 지그재그(좌→우, 우→좌 반복) 형태로 쌓는다.

꺼내려는 상자가 주어졌을 때 해당 상자를 포함하여 총 몇 개의 상자를 꺼내야 하는지 구하는 문제이다.

 

예를 들어 같은 열에 위쪽에 있는 상자가 있다면 그 상자부터 먼저 꺼내야 한다.


📌 접근 방법

이 문제의 핵심은 상자의 번호를 2차원 좌표(row, column)로 변환하는 것이다.

  1. 상자의 행(row)과 열(column)을 계산한다.
  2. 홀수 행은 역방향으로 배치되므로 실제 열 위치를 변환한다.
  3. 현재 상자와 같은 열에 있는 위쪽 상자들을 찾는다.
  4. 마지막 행은 상자가 부족할 수 있으므로 실제 존재하는 상자인지 확인한다.
  5. 현재 상자를 포함한 개수를 반환한다.

📌 핵심 아이디어

1. 행과 열 계산

상자의 위치를 2차원 좌표로 변환한다.

int row = (num - 1) / w;
int col = (num - 1) % w;

2. 지그재그 방향 처리

짝수 행은 그대로 사용한다.

1 2 3 4

홀수 행은 반대로 배치된다.

8 7 6 5

따라서 실제 열을 맞춰준다.

if(row % 2 == 1){
    col = w - 1 - col;
}

 


3. 같은 열만 확인

현재 상자를 막는 것은 같은 열에 있는 상자뿐이다.

위쪽 행을 하나씩 검사하면서 해당 위치에 상자가 존재하면 개수를 증가시킨다.


4. 마지막 행 예외 처리

마지막 행은 항상 가득 차는 것이 아니다.

따라서 계산한 번호가 n을 초과하는지 확인해야 한다.


📌 전체 코드

class Solution {
    public int solution(int n, int w, int num) {
        int row = (num - 1) / w;
        int col = (num - 1) % w;

        // 현재 상자의 실제 열 위치
        if (row % 2 == 1) {
            col = w - 1 - col;
        }

        int answer = 1; // 현재 상자 포함

        int lastRow = (n - 1) / w;

        // 현재 상자 위의 행만 확인
        for (int r = row + 1; r <= lastRow; r++) {
            int box;

            if (r % 2 == 0) {
                box = r * w + col + 1;
            } else {
                box = r * w + (w - col);
            }

            if (box <= n) {
                answer++;
            }
        }

        return answer;
    }
}
 

📄 정리

  • 상자 번호를 좌표(row, column)로 변환하는 것이 핵심이다.
  • 홀수 행은 역방향 배치이므로 열 위치를 반대로 계산해야 한다.
  • 현재 상자를 막는 것은 같은 열의 상자뿐이다.
  • 마지막 행이 비어 있을 수 있으므로 존재 여부를 반드시 확인해야 한다.
  • 구현 자체는 어렵지 않지만 좌표 변환과 예외 처리가 핵심인 구현 문제였다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 문자열안에 문자열 JAVA 풀이 (Level 0)  (0) 2026.07.09
프로그래머스 크레인 인형뽑기 게임 JAVA 풀이 (2019 카카오 개발자 겨울 인턴십)  (0) 2026.07.08
프로그래머스 문자열 안의 숫자 더하기 JAVA 풀이 (문자열, 구현, 아스키코드)  (0) 2026.07.05
프로그래머스 다트 게임 JAVA 풀이  (0) 2026.07.04
프로그래머스 PCCE 기출문제 10번 데이터 분석 JAVA 풀이 (구현, 정렬)  (0) 2026.07.03
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 문자열안에 문자열 JAVA 풀이 (Level 0)
  • 프로그래머스 크레인 인형뽑기 게임 JAVA 풀이 (2019 카카오 개발자 겨울 인턴십)
  • 프로그래머스 문자열 안의 숫자 더하기 JAVA 풀이 (문자열, 구현, 아스키코드)
  • 프로그래머스 다트 게임 JAVA 풀이
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN N
      • 코테(Solved.ac + Programmers) N
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

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

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    정처기오답노트
    java
    코딩테스트
    백엔드개발자
    알고리즘
    프로그래머스
    정보처리기사 실기 기출문제
    dp
    백준
    배열
    정렬
    solved.ac
    기출문제
    자바
    실기
    자료구조
    정처기실기
    시뮬레이션
    피보나치
    완전탐색
    브루트포스
    정처기
    수학
    level0
    level1
    구현
    문자열
    정보처리기사
    springboot
    Level2
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 택배 상자 꺼내기 JAVA 풀이 (2025 코드 챌린지)
상단으로

티스토리툴바