본문 바로가기
Cospro 2급/C언어

[1차]문제 5. 배열의 순서 뒤집기 풀이 및 해석

by SRin23 2021. 5. 5.

■ 문제 설명

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

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

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

 

■ 매개변수 설명

정수가 들어있는 배열 arr와 arr의 길이 arrlenㅣ solution함수의 매개변수로 주어집니다. 

* arrlen은 1이상 100이하의 자연수입니다. 

* arr의 원소는 -100이상 100이하의 정수입니다.

 

■ return 값 설명

배열 arr의 순서를 뒤집어서 return 해주세요

 

■ 예시

[1, 4, 2, 3]은 뒤에서 부터 읽으면 3, 2, 4, 1입니다. 따라서 [1, 4, 2, 3]의 순서를 뒤집은 결과는 [3, 2, 4, 1]이 됩니다.

 

■ 초기내용

[출처]goormedu COSPRO 2급 기출문제 1차-5번 초기내용

 

위 내용을 바탕으로 solution함수 내의 while문의 조건식을 채워야 한다.

 

■ 답안

#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(right>left){
        int temp = arr[left]; //temp = arr[0]
        arr[left] = arr[right];	//arr[0] = 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);

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

 

■ 답안 풀이 및 해석

(※ 실행 흐름 순으로 해석됩니다.)

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을 4개를 선언

//배열 arr의 길이 arr_len을 선언

//ret 포인터 변수에 solution의 return값 주소를 대입

 

//printf()함수를 통해 출력

//for문을 arr의 개수만큼 돌림

// i가 0이 아니면 arr방의 내용을 순서대로 출력

 

 

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

//left를 0으로, right를 arr_len-1(3)으로 선언, 배열의 인덱스는 배열의 크기-1이다.

//right의 값이 left보다 클때 while반복문 실행

//임의의 변수 temp를 이용하여 arr[right]방(인덱스가 높은 부분)과 arr[left]방(인덱스가 작은 부분)을 switch

//left+1, right-1을 하여 각 배열을 차례로 비교

 

■ 실행결과

문제 5.  배열의 순서 뒤집기 답안

 

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

COS PRO 2급 기출문제 - C언어 - 구름EDU

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io

 

댓글