본문 바로가기

cospro2급/cospro_1차

2021-05-05

cospro 5번 문제

배열의 순서 뒤집기

 

문제설명

주어진 배열의 순서를 뒤집는다.

예를 들어 배열이[1, 4, 2, 3]이면 뒤집은 배열은[3, 2, 4, 1]이다.

정수가 들어있는 배열 arr과 arr의 길이 arr_len이 매개변수로 주어졌을 때, arr을 뒤집어서 return하는 solution함수를 완성한다.

 

매개변수 설명

정수가 들어있는 배열 arrarr의 길이 arr_len이 solution함수의 매개변수로 주어진다. 

*arr_len은 1 이상 100 이하의 자연수이다.

*arr의 원소의 -100 이상 100 이하의 자연수이다.

 

return값 설명

배열 arr의 순서를 뒤집어서 return 한다.

 

예시 설명 

[1, 4, 2, 3]을 뒤집으면 [1, 4, 2, 3]이 된다.

 

코드설명

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int* solution(int arr[], int arr_len) {
    int left = 0; //왼쪽방번호
    int right = arr_len - 1; 	//오른쪽방번호, 배열의 방번호는 배열의 길이보다 1이 작다.
    while(left < right){ 	//left와 right의 순서가 뒤집힐 때 즉, 배열의 방이 모두 뒤집혔을 때까지
        int temp = arr[left]; 	//left가 0일 때 arr[0]을 temp에 넣는다.
        arr[left] = arr[right]; 	//arr[0]은 temp에 복사했으므로 arr[3]방의 값을 넣는다.
        arr[right] = temp; 	//마찬가지로 arr[3]방에 arr[0]의 값을 넣는다. 
        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); //배열과 배열의 길이를 solution함수로 넘김

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

부가설명을 하자면 while문 안에서 temp가 있어야 하는 이유는 arr[0]의 값을 arr[3]에 넣으면 (ex : arr[0]=arr[3])

arr[0]방의 값이 사라지기 때문에 임시공간인 temp를 선언하여 값을 복사해준다. temp는 while문이 끝나면 사라진다.

 

배열을 뒤집는 방법은 왼쪽 끝방과 오른쪽 끝방을 바꾸는 형식으로 진행된다. left는 왼쪽 끝방부터 오른쪽으로 한칸 씩 이동하고  right는 오른쪽 끝방부터 왼쪽으로 한칸 씩 이동한다. 그러다 둘이 만나게 됐을 때, 즉 left가 right보다 커지면 모든 뒤집기가 끝난다. 

 

 

함수 실행 과정
while(0<3) arr[0] -> temp, arr[3] -> arr[0], temp ->arr[0] / left=1 right=2


while(1<2) arr[1] -> temp, arr[2] -> arr[1], temp ->arr[2] / left=2 right=1


while(2<1) while문 종료

 

 

 

'cospro2급 > cospro_1차' 카테고리의 다른 글

2021-05-06  (0) 2021.05.06
2021-05-05  (0) 2021.05.05
2021-05-03  (0) 2021.05.03
2021-05-03  (0) 2021.05.03
2021-05-02  (0) 2021.05.02