티스토리 뷰

 

 

문제

주어진 배열의 순서를 뒤집으려고 합니다.

예를 들어 주어진 배열이 [1,4,2,3]이면, 순서를 뒤집은 배열은 [3,2,4,1]입니다.

정수가 들어있는 배열 arr와 arr의 길이 arr_len이 매개변수로 주어졌을 때, arr를 뒤집어서 return하도록 solution함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.

 

 

 

 


 

 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(int arr[], int arr_len) {
    int left = 0;
    int right = arr_len - 1;
    while (left < (arr_len / 2)) {  	//빈칸
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left += 1;
        right -= 1;
    }
    return arr;
}
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");
}

 

 

 

 


 

 

 

 

예시

arr arr_len return
[1,4,2,3] 4 [3,2,4,1]

 

 

 

 

코드설명

단계 과정
main arr과 arr의 길이 arr_len값을 설정한 후,
solution함수를 호출한다.
solution 배열의 인덱스 역할을 할 변수 left와 right를 선언한다.
이때 left는 0, right는 arr_len-1(배열의 인덱스)로 초기화한다.

solution - while temp변수를 선언하여 arr[left]값을 넣고, arr[left]에는 arr[right]를, arr[right]에는 temp를 넣어
배열 양쪽의 값들을 서로 바꿔주는 방식을 사용한다.
(예를 들어 arr[0]는 arr[3]과, arr[1]는 arr[2]와 바꾸어 reverse를 진행한다.)
while문을 통해 계속해서 값을 교환하는데, 이때 left는 right보다 클 수 없다.
따라서 while의 조건에 (left<right)조건을 넣어 제한된 범위 내에서만 교환이 되도록 한다.


+)나는 left < (arr_len / 2)를 사용하여 left가 arr배열의 길이의 절반을 넘지 않도록 풀었지만,
(arr_len / 2)를 right로 바꾸어서 풀었을 때와 조건은 같다고 볼 수 있다.
solution / main 모든 계산이 끝나고 solution에서 arr를 반환하여 main에서 출력이 진행되고, 프로그램이 종료된다.

 

댓글