택배 상자 꺼내기

하이솝·2026년 3월 6일

2026.02.27

조건문을 설정하는 데에 있어서 세부사항을 고려하지 못 함
변수를 설정할 때에 있어서 좀 더 많은 생각을 하는 연습이 필요함.

1차 실행 오류
다음 줄로 넘어갈 때 i % w == 0 조건에서
w의 배수가 되기 전에 목표 상자에 접근하게 되는 경우가 발생

class Solution {
    public int solution(int n, int w, int num) {
        int answer = 0;
        int lines = n / w; // 나오는 총 줄의 수
        if (n % w > 0) {
            lines++;
        }
        for (int i = n; i >= 0; i--) {
            if (i % w == 0) { // 다음 줄로 넘어갈 때
                answer++;
            }
            if (i == num) { // 찾으려는 상자에 접근 시 종료
                answer++;
                break;
            }
        }
        return answer;
    }
}

2차 실행 오류
탐색하고자 하는 상자가 첫번째 줄에 있을 때 line이 0으로 설정됨

class Solution {
    public int solution(int n, int w, int num) {
        int answer = 0;
        int line = 0;
        int order = 1;
        // num이 밑에서부터 몇번째 줄에 있는지 확인
        for (int i = 1; i <= n; i++) {
            if (i % w == 0) {
                line++;
            }
            if (i == num) {
                break;
            }
        }
        // 몇번째에 위치해있는지 찾기
        // 홀수 라인일 때
        if (line % 2 != 0) {
            order = num % w;
            if (order == 0) {
                order = w;
            }
        }
        // 짝수 라인일 때
        else {
            order = line * w - num + 1;
        }
        while(true) {
            if (num > n) {
                break;
            }
            // 짝수 라인일 때
            if (line % 2 == 0) {
                num += 2 * order - 1;
                line++;
                answer++;
            }
            // 홀수 라인일 때
            else {
                num += (w - order) * 2 + 1;
                line++;
                answer++;
            }
        }
        return answer;
    }
}

소요 시간: 1시간 17분 28초

내가 제출한 정답

class Solution {
    public int solution(int n, int w, int num) {
        int answer = 0;
        int line = 0;
        int order = 1;
        // num이 밑에서부터 몇번째 줄에 있는지 확인
        for (int i = 1; i <= n; i++) {
            if (i % w == 0) {
                line++;
            }
            if (i == num) {
                break;
            }
        }
        if (line == 0) {
            line = 1;
        }
        // 몇번째에 위치해있는지 찾기
        // 홀수 라인일 때
        if (line % 2 != 0) {
            order = num % w;
            if (order == 0) {
                order = w;
            }
        }
        // 짝수 라인일 때
        else {
            order = line * w - num + 1;
        }
        while(true) {
            if (num > n) {
                break;
            }
            // 짝수 라인일 때
            if (line % 2 == 0) {
                num += 2 * order - 1;
                line++;
                answer++;
            }
            // 홀수 라인일 때
            else {
                num += (w - order) * 2 + 1;
                line++;
                answer++;
            }
        }
        return answer;
    }
}

0개의 댓글