개린이 탈출기

[코테연습] 택배 상자 꺼내기 본문

일상메모

[코테연습] 택배 상자 꺼내기

yooverd 2025. 3. 21. 01:12
728x90
반응형
SMALL

문제 : 택배 상자 꺼내기

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

 

 

작성한 코드

class Solution {
    public int solution(int n, int w, int num) {
        int answer = 0;
        
        // 꽉 찬 줄과 마지막 줄은 boolean 배열로 표현       
        int fullRow = n/w;
        int restBox = n%w;
        boolean [] finalRow = new boolean [w];
        
        // 마지막 줄 중 박스가 존재하는 열은 true
        for(int k=0; k<restBox; k++) {
            if(fullRow%2==0) { // 꽉찬 줄이 짝수라면
                finalRow[k] = true; // 마지막 줄은 왼쪽부터 채움
            } else {
                finalRow[w-1-k] = true;
            }
        }
        
        // 꺼내려는 상자 위치 파악을 위한 정보
        int targetRow = num%w == 0 ? num/w : num/w +1;
        int targetRestBox = num%w;
        int targetColIdx;
        
        // 꽉찬 줄 기준으로 꺼내야 하는 상자 개수
        answer = fullRow-targetRow+1;
        // 꺼내려는 상자의 열 위치 구하기
        if(targetRow%2 != 0) { // 홀수 줄이라면 왼쪽부터 열 카운팅
            targetColIdx = targetRestBox == 0 ? w-1 : num%w - 1;
        } else {
            targetColIdx = targetRestBox == 0 ? 0 : w-targetRestBox;
        }
        
        // 타겟 상자 열 위치로 마지막 줄 동일한 열에 상자 유무 체크
        if(finalRow[targetColIdx]) answer++;
        
        return answer;
    }
}

 

처음 2차원 배열로 코드를 작성하다가 중첩 for문을 사용하는 순간 정신을 차렸다.

생각해보니 마지막 줄의 경우만 상자 유무를 따져보면 될 것 같아서 이중 for문을 피하고 1차원 배열을 사용했다.

728x90
반응형
LIST

'일상메모' 카테고리의 다른 글

[코테연습] 동영상 재생기  (0) 2025.03.24
[코테연습] 유연근무제 (이차배열)  (0) 2025.03.24
[코테연습]  (0) 2025.03.18
[코테연습] 2차원 배열  (0) 2025.03.16
[코테 연습] 개행문자, 나머지연산  (0) 2025.03.14