Coding Test/JAVA 코딩테스트 풀이정리(프로그래머스)

프로그래머스 스쿨(Java - Lv.1) - 택배 상자 꺼내기[2025 프로그래머스 코드챌린지 2차 예선]
깝몬 2025. 2. 20. 20:44

문제

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

 

해답

 

class Solution {
    public int solution(int n, int w, int num) {
        boolean left = true;
        int maxC = n/w+(n%w==0?0:1);
        int c = 0;
        int r = 0;
        int numc = 0;
        int numr = 0;
        int[][] boxes = new int[maxC][w];
        for(int i=1;i<=n;i++){
            if(i==num){
                numc=c;
                numr=r;
            }
            if(left){ //오른쪽
                boxes[r][c]=i;
                if(c==w-1){
                    r++;
                    left = false;
                }else{
                    c++;    
                }
            }else{ //왼쪽
                boxes[r][c]=i;
                if(c==0){
                    r++;
                    left = true;
                }else{
                    c--;    
                }
            }
        }
        int answer = 0;
        while(numr<maxC){
            if(boxes[numr][numc]!=0)
                answer++;
            numr++;
        }
        
        return answer;
    }
}

 

 

해설

 

문제를 수학적인 규칙으로 풀어보려했으나, 의도가 직접 배열안에 순차적으로 숫자를 담고

 

그 숫자가 제대로 들어가서 올바르게 처리할수 있는것인지를 묻는 문제로 보여 직접 배열에 숫자들을 담고

 

그 숫자들을 이용해서 답을 구했다.