편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2023.09.18

    C언어 pancake sorting 질문드립니다.


    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /// 함수 선언
    void flip(int arr[], int i);
    int findMax(int arr[], int n);
    void pancakeSort(int arr[], int n);
    
    // 배열 요소를 뒤집는 함수
    void flip(int arr[], int i)
    {
        int temp, start = 0;
        while (start < i)
        {
            temp = arr[start];
            arr[start] = arr[i];
            arr[i] = temp;
            start++;
            i--;
        }
    }
    
    // 배열에서 최대값의 인덱스를 찾는 함수
    int findMax(int arr[], int n)
    {
        int max = 0;
        for (int i = 0; i < n; ++i)
        {
            if (arr[i] > arr[max])
                max = i;
        }
        return max;
    }
    
    // 팬케이크 정렬 함수
    void pancakeSort(int arr[], int n)
    {
        for (int curr_size = n; curr_size > 1; --curr_size)
        {
            int max = findMax(arr, curr_size);
            if ((max != curr_size - 1) && (max != 0))
            {
                flip(arr, max);
                printf("%d ", n - max);
    
            }
            if ((max != curr_size - 1) && (max == 0))
            {
                flip(arr, max);
                flip(arr, curr_size - 1);
                printf("%d ", n - (curr_size - 1));
            }
    
        }
        printf("0\n");
    }
    int main()
    {
        int arr[] = { 5, 1, 2, 4, 3 };
        int n = sizeof(arr) / sizeof(arr[0]);
    
        printf("Original Array: ");
        for (int i = 0; i < n; ++i)
            printf("%d ", arr[i]);
        printf("\n");
    
        pancakeSort(arr, n);
    
        printf("Sorted Array: ");
        for (int i = 0; i < n; ++i)
            printf("%d ", arr[i]);
        printf("\n");
    
        return 0;
    }
    

    이렇게 했는데 중간에 몇번째 층(가장 오른쪽 숫자가 1층이라고 했을때)에서 뒤집는지를 순서대로 출력해야하는데 '1 4 2 0' 이 아니라 '1 4 3 0' 으로 출력됩니다. 어떻게 고쳐야 제대로 출력할 수 있을까요? 조언 부탁드립니다 감사합니다

  • 프로필 양서현님의 편집
    날짜2023.09.12

    C언어 pancake sorting 질문드립니다.


    define _CRT_SECURE_NO_WARNINGS

    include

    include

    include

    /// 함수 선언 void flip(int arr[], int i); int findMax(int arr[], int n); void pancakeSort(int arr[], int n);

    // 배열 요소를 뒤집는 함수 void flip(int arr[], int i) { int temp, start = 0; while (start < i) { temp = arr[start]; arr[start] = arr[i]; arr[i] = temp; start++; i--; } }

    // 배열에서 최대값의 인덱스를 찾는 함수 int findMax(int arr[], int n) { int max = 0; for (int i = 0; i < n; ++i) { if (arr[i] > arr[max]) max = i; } return max; }

    // 팬케이크 정렬 함수 void pancakeSort(int arr[], int n) { for (int curr_size = n; curr_size > 1; --curr_size) { int max = findMax(arr, curr_size); if ((max != curr_size - 1) && (max != 0)) { flip(arr, max); printf("%d ", n - max);

        }
        if ((max != curr_size - 1) && (max == 0))
        {
            flip(arr, max);
            flip(arr, curr_size - 1);
            printf("%d ", n - (curr_size - 1));
        }
    
    }
    printf("0\n");
    

    } int main() { int arr[] = { 5, 1, 2, 4, 3 }; int n = sizeof(arr) / sizeof(arr[0]);

    printf("Original Array: ");
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
    printf("\n");
    
    pancakeSort(arr, n);
    
    printf("Sorted Array: ");
    for (int i = 0; i < n; ++i)
        printf("%d ", arr[i]);
    printf("\n");
    
    return 0;
    

    } 이렇게 했는데 중간에 몇번째 층(가장 오른쪽 숫자가 1층이라고 했을때)에서 뒤집는지를 순서대로 출력해야하는데 '1 4 2 0' 이 아니라 '1 4 3 0' 으로 출력됩니다. 어떻게 고쳐야 제대로 출력할 수 있을까요? 조언 부탁드립니다 감사합니다