[1차][빈칸] 문제2) 배열의 순서 뒤집기

xodus·2022년 11월 20일
0

cospro2급 c언어

목록 보기
2/2

✌️11/21 오늘의 문제!

  • [1차][빈칸] 문제2) 배열의 순서 뒤집기

문제 설명

주어진 배열의 순서를 뒤집으려고 합니다.
예를 들어 주어진 배열이 [1, 4, 2, 3]이면, 순서를 뒤집은 배열은 [3, 2, 4, 1] 입니다.
정수가 들어있는 배열 arr과 arr의 길이 arr_len이 매개변수로 주어졌을 때, arr를 뒤집어서 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

문제 코드

#include <stdio.h>

int main() {
    int arr[4] = { 1, 4, 2, 3 };
    int arr_len = 4;
    int* ret = solution(arr, arr_len);

    printf("solution 함수의 반환 값은 {");
    for (int i = 0; i < 4; i++) {
        if (i != 0) printf(", ");
        printf("%d", ret[i]);
    }
    printf("} 입니다.\n");
}

int* solution(int arr[], int arr_len) {
    int left = 0;
    int right = arr_len - 1;
    while (//빈칸) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left += 1;
        right -= 1;
    }
    return arr;
}

완성코드

#include <stdio.h>

int main() {
    int arr[4] = { 1, 4, 2, 3 };
    int arr_len = 4;
    int* ret = solution(arr, arr_len);

    printf("solution 함수의 반환 값은 {");
    for (int i = 0; i < 4; i++) {
        if (i != 0) printf(", ");
        printf("%d", ret[i]);
    }
    printf("} 입니다.\n");
}

int* solution(int arr[], int arr_len) {
    int left = 0;
    int right = arr_len - 1;
    while (left < right) {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left += 1;
        right -= 1;
    }
    return arr;
}

코드 설명 및 소감

left = 배열 시작 값, right = 배열 끝 값 temp 변수를 사용해서 배열 값 하나씩 이동하여 교환하여 준다. 반복할때마다 left는 +1 right는 -1을 해주어 범위를 줄여가고 left < right를 만족할 경우 반복문이 실행된다.
left가 right보다 크면 이미 교환한 값을 다시 교환하는 것과 같다.

나는.. 아직 코테나 알고리즘..? 이 많이 부족한것 같아서 이해하는데 조금 오래 걸렸던것 같다. 단순 답을 외우는 것이 아니라 왜 이렇게 되는지에 대한 이유를 찾아보게 되었다.~😍

0개의 댓글