- [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보다 크면 이미 교환한 값을 다시 교환하는 것과 같다.
나는.. 아직 코테나 알고리즘..? 이 많이 부족한것 같아서 이해하는데 조금 오래 걸렸던것 같다. 단순 답을 외우는 것이 아니라 왜 이렇게 되는지에 대한 이유를 찾아보게 되었다.~😍