더북(TheBook)

1.5.10 최대-최소 배열

문제 1-10 주어진 정렬된 배열을 최대-최소 형태로 재배열하세요.

예시

입력 [1, 2, 3, 4, 5, 6, 7]

출력 [7, 1, 6, 2, 5, 3, 4]

첫 번째 해결책 보조 배열로 입력 배열의 복사본을 만듭니다. 입력 배열을 처음부터 끝까지 순회하며 값들을 보조 배열에 번갈아 넣습니다.

해결책 1-10-1

void MaxMinArr(int arr[], int size)
{
    int *aux = (int *)malloc(size * sizeof(int));
    for (int i = 0; i < size; i++) {
        aux[i] = arr[i];
    }

    int start = 0;
    int stop = size - 1;
    for (int i = 0; i < size; i++) {
        if (i % 2 == 0) {
            arr[i] = aux[stop];
            stop -= 1;
        }
        else {
            arr[i] = aux[start];
            start += 1;
        }
    }
}

분석 시간 복잡도는 O(n)이며, 공간 복잡도는 O(n)입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.