[JAVA 문제 풀이] 332. 택배 상자 꺼내기

프로그래머스 (389478)
Stupefyee's avatar
Jun 20, 2025
[JAVA 문제 풀이] 332. 택배 상자 꺼내기
notion image
notion image
 

내가 작성한 코드

public 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 count = 0; // 뺄 상자 수 int maxRow = (n + w - 1) / w; // 총 층 수 // 찾는 상자의 층수 + 1 부터 최대 층 수까지 for (int i = row + 1; i < maxRow; i++) { int targetCol = (i % 2 == 0) ? col : w - 1 - col; // 행이 홀수이면 열순서 뒤집기 int boxNum = i * w + targetCol + 1; // 찾는 상자 위의 있는 상자 // 그 상자가 존재하는지 확인 if (boxNum <= n) { count++; // 유효한 상자면 하나 추가 } } return count + 1; // 본인 포함 시키기 } }
 

다른 사람의 코드

class Solution { /* Programmers. 택배 상자 꺼내기 --------------------------- [문제 설명] 택배 상자 - 1~N 택배 쌓기 - 왼쪽에서 오른쪽으로 w개 쌓기 - 그 위에 오른쪽에서 왼쪽으로 w개 쌓기 - 반복 택배 꺼내기 - 입력된 상자번호(A)를 꺼내기 - 그 위에 쌓인 모든 상자부터 꺼내야 함 [입력] N : 창고에 있는 택배 상자의 수 W : 가로로 놓는 상자 수 num : 꺼내려는 상자 번호 [출력] 꺼래려는 상자를 포함해서 총 꺼내야하는 상자의 수 [제한사항] 2 <= N <= 100 1 <= W <= 10 1 <= num <= N */ public int solution(int n, int w, int num) { int cnt = 0; // 꺼내야 하는 상자 개수를 세는 변수 (자기 자신 포함) // num이 전체 상자 수 n보다 작거나 같은 동안 반복 while (num <= n) { // 위 층에서 같은 열에 해당하는 다음 상자의 번호를 계산하는 공식 // ((num-1) % w): 현재 상자의 열 위치 (왼쪽부터 0 시작) // w - ((num-1) % w) - 1: 그 열의 반대편 열까지의 거리 // * 2 + 1: 지그재그 구조로 인해 다음에 같은 열에 오는 상자까지의 간격 num += (w - ((num - 1) % w) - 1) * 2 + 1; cnt++; // 상자 하나 꺼냄 (자기 자신 포함) } // 위에 있는 상자들 + 본인 포함한 개수 반환 int answer = cnt; return answer; } }
 
Share article

stupefyee