2025 프로그래머스 코드챌린지 2차 예선 - 택배 상자 꺼내기 - JAVA

2025. 3. 4. 13:41백준 및 프로그래머스/프로그래머스 LV 1

문제 설명

 

제한사항 및 테스트 케이스 구성 안내

 

입출력 예

 

문제 설명
1.상자를 순서대로 쌓아 나갑니다. 단 1~N까지의 번호의 상자를 쌓아야 하기에 N 이후로는 쌓지 않습니다.
2.상자를 쌓다 보면 홀수 번째 줄에서는 정 방향으로 흐르지만, 짝 수 번째 줄에서는 반대 방향으로 흐릅니다.
3.상자를 쌓고 나면 내가 찾으려고 하는 상자의 위치가 어디인지 찾아줍니다.
4.내가 찾으려고 하는 상자의 위치부터 어느 정도의 깊이까지 쌓여있는지 파악합니다.
5.파악한 후 얼마나 걷어내야 원하는 상자를 찾을 수 있는지 출력해줍니다.

 

전체 코드

import java.util.*;
class Solution {
    public int solution(int n, int w, int num) {
        //총 상자 갯수 변수
        int answer = 0;
        
        int[][] box = new int[100][w];
        // n을 넘지 않기 위한 count
        // 각 위치에 맞게 box에 저장.
        int count = 1;
        //num 위치를 찾기 위한 x,y변수
        int x = -1 ;
        int y = -1 ;
        
        //박스 생성 
        createbox(count,n,box,w);
        
        //찾으려고 하는 상자가 어디 위치에 있는 지 파악.
        for(int i = 0; i<100; i++){
            for(int j = 0; j<w; j++){
                if(box[i][j] == num){
                    x = i;
                    y = j;
                }
            }
        }
        
        //상자 위치를 파악 후 0이 나오면 상자가 없다는 의미니 0이 나올 때 까지 탐색
        //0이 나오기 전까지 answer++ 해주면서 상자를 얼마나 탐색했는 지 확인
        for(int i = x; i<100; i++){
            if(box[i][y] == 0){
                break;
            }else{
                answer++;
            }
        }
        return answer;
    }
    
    //박스 생성
    static void createbox(int count,int n,int[][] box,int w){
        while (count<=n){
            for(int i = 0; i<100; i++){
                if(i%2 == 0){
                    for(int j = 0; j<w; j++){
                        box[i][j] = count++;
                        if(count > n){
                            return;
                        }
                    }
                }else{
                    for(int j = w-1; j>=0; j--){
                        box[i][j] = count++;
                        if(count > n){
                            return;
                        }
                    }
                }
            }
        }
    }
}