cospro 5번 문제
배열의 순서 뒤집기
문제설명
주어진 배열의 순서를 뒤집는다.
예를 들어 배열이[1, 4, 2, 3]이면 뒤집은 배열은[3, 2, 4, 1]이다.
정수가 들어있는 배열 arr과 arr의 길이 arr_len이 매개변수로 주어졌을 때, arr을 뒤집어서 return하는 solution함수를 완성한다.
매개변수 설명
정수가 들어있는 배열 arr과 arr의 길이 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 |