신뇽이 되어보자

[프로그래머스] 택배 상자 꺼내기 본문

CodingTest

[프로그래머스] 택배 상자 꺼내기

신뇽이되고싶은미뇽 2025. 3. 3. 13:51
728x90

 

내 코드 

class Solution {
    public int solution(int n, int w, int num) {
        int answer = 0;
        int cnt = 1;
        int rr = 0;
        int dd = 0;
       
        // 행의 개수를 정확하게 계산
        int rows = (n % w == 0) ? (n / w) : (n / w) + 1;
         int [][]arr = new int[rows][w];
        //n: 택배 상자의 개수를 나타내는 정수
        //w: 가로로 놓는 상자의 개수
        for(int i = 0; i < rows; i++){
                if(i % 2 == 1){ //홀수 층일 때 
                    for(int j = w - 1; j >= 0; j--){
                     arr[i][j] = cnt; 
                      if(cnt == n){
                            break;
                        }
                       else if(cnt == num){
                             rr = i;
                             dd = j;
                        }
                       
                        cnt++;
                    }
                 }else{//짝수 층이라면?
                    for(int j = 0; j < w; j++){
                        arr[i][j] = cnt;
                          if(cnt == n){
                            break;
                        }
                        else if(cnt == num){
                             rr = i;
                             dd = j;
                        }
                        
                        cnt++;
                       }
                }
        }
        
        for(int k = rows -1 ; k >= rr; k--){
            if(arr[k][dd]!=0){
                answer++;
            }
        }
  
        
        return answer;
    }
}

 

놓친 점

 

1. 

층 수를 계산할 때 

n%w가 0이 되면 배열이 끝까지 다 찾다는 소리이고

아니라면 n/w한 것에다가 1을 더해줘야한다.

 

근데 나는 후자만 생각을 했었다.

그래서 테스트 코드 몇 가지만 통과하는 결과를 얻게 되었다.

 

2. 

arr배열에 cnt를 넣기 전에 cnt가 num이랑 같다면 break를 하라는 if문을 넣어버려서

arr에 cnt가 num일 경우에 값을 넣지 못하는 불상사가 발생했다.

 

이 두가지를 해결해주니 통과 완료!

 

 

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

 

프로그래머스

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

programmers.co.kr

 

728x90