우당탕탕 개발일지

[프로그래머스] 택배 상자 꺼내기 (Lv.1, Java) 본문

코테/프로그래머스

[프로그래머스] 택배 상자 꺼내기 (Lv.1, Java)

ujin302 2025. 3. 21. 22:36
반응형

문제

n: 박스 개수

w: 한줄에 박스 개수

num: 빼고 싶은 박스 번호

 

 

풀이

boxArr 2차배열에 제시된 그림처럼 박스 번호를 저장했다.

짝수와 홀수에 따라서 저장되는 식을 만들어 넣었다

짝수: w * i + (j+1)

홀수: w * (i+1) - j

 

저장하면서 꺼내려고 하는 박스 번호와 마지막 박스 번호를 각각의 변수에 저장했다.

꺼내려고 하는 박스위에 몇줄이 있는지 확인하고 그 값을 출력하면 끝..!

이 과정이 너무 오래걸림.... ㅠ

 

다른 사람 코드를 보니 배열에 저장하는 경우는 없었다... 넘 무식하게 푼것 같다...ㅎ

다른 방법을 공부해봐야겠다.

 

최종 코드

class Solution {
    public int solution(int n, int w, int num) {
        int h = n/w + (n%w==0? 0 : 1);
        int[][] boxArr = new int[h][w];
        int[] boxpo = new int[2]; // 박스 위치;
        int[] lastboxpo = new int[2]; // 마지막 박스 위치;
        
        for(int i=0; i<h; i++) {
            for(int j=0; j<w; j++) {
                System.out.println("i: " + i + " & j: " + j);
                if(i % 2 == 0) {
                    // 짝수 줄
                    boxArr[i][j] = w * i + (j + 1);
                } else {
                    // 홀수 줄
                    boxArr[i][j] = w * (i + 1) - j;
                }
                
                if(boxArr[i][j] == num) {
                    // 현재 박스 번호 == 꺼내려고 하는 수
                    boxpo[0] = i;
                    boxpo[1] = j;
                } else if(boxArr[i][j] == n) {
                    // 현재 박스 번호 == 마지막 박수 번호
                    lastboxpo[0] = i;
                    lastboxpo[1] = j;
                }
            }
        }
        
        if(boxArr[lastboxpo[0]][boxpo[1]] <= n) {
            return lastboxpo[0] - boxpo[0] + 1;
        } else {
            return lastboxpo[0] - boxpo[0];
        }
        
    }
}

 

 

프로그래머스 문제

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

 

프로그래머스

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

programmers.co.kr

 

반응형