본문 바로가기

Algorithm/PS

[1일 1알고] 택배 상자 꺼내기

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

 

프로그래머스

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

programmers.co.kr

 

배열을 사용하면 굉장히  쉽게 풀 수 있지만 이런 문제는 또 수학적으로 풀고 싶은 마음이 생기죠

 

// 1~n 번호의 택배 상자
// snake형식으로 쌓음 좌하단부터 시작
// 특정 숫자를 찾을 때 몇 열인지 확인

int solution(int n, int w, int num) {
    int answer = 0;

    int q = (num-1) / w + 1;
    int r = (num-1) % w + 1;

    int offset;
    if (q % 2 == 0)
    {
        offset = w - r + 1;
    }
    else
    {
        offset = r;
    }

    int nq = (n - 1) / w + 1;
    int nr = (n - 1) % w + 1;
    int noffset;
    if (nq % 2 == 0)
    {
        noffset = w - nr + 1;

        if (offset >= noffset)
        {
            answer = nq - q + 1;
        }
        else
        {
            answer = nq - q;
        }
    }
    else
    {
        noffset = nr;

        if (offset <= noffset)
        {
            answer = nq - q + 1;
        }
        else
        {
            answer = nq - q;
        }
    }
    return answer;
}

 

전체 상자의 높이 offset과 꺼낼 상자 높이 offset를 계산해 이를 통해 답을 도출했습니다.