C 과제: Swapping Array

2 분 소요

질문

내용

크기가 같은 2개의 정수형 배열을 매개변수로 전달받아 두 배열의 원소들의 값을 맞바꾸는 함수를 작성하시오.

이 함수를 이용해서 크기가 5인 두 배열의 값을 맞바꾸는 프로그램을 작성하시오.

배열은 다음과 같이 초기화해서 사용한다.

실행 결과

a 배열: 1 3 5 7 9
b 배열: 0 2 4 6 8
<< swap_array 호출 후 >>
a 배열: 0 2 4 6 8
b 배열: 1 3 5 7 9

답변

내용

실행 결과를 통해 길이가 5인 두 개 배열 a, b를 선언한 후 각각 1 3 5 7 9와 0 2 4 6 8로 초기화(Initialization)하자.

int main(void) {
    int a[5] = {1, 3, 5, 7, 9};
    int b[5] = {0, 2, 4, 6, 8};
}

그 다음 실행 결과와 동일한 결과가 출력되게끔 적절한 출력문도 작성하자.

(a, b 배열의 길이는 5이고, Zero-based numbering에 의하여 인덱스 번호(Index Number)는 0부터 시작하므로 0부터 4까지 반복하는 반복문을 이용하자.)

또한, 출력을 위해 printf() 함수를 사용해야 하므로 헤더파일(stdio.h) 선언도 잊지 말자.

즉, 코드로 보이면 다음과 같다.

#include <stdio.h>

int main(void) {
    int a[5] = {1, 3, 5, 7, 9};
    int b[5] = {0, 2, 4, 6, 8};

    printf("a 배열: ");
    
    for(int i=0; i<5; i++)
        printf("%d ", a[i]);
    
    printf("\n");

    printf("b 배열: ");

    for(int i=0; i<5; i++)
        printf("%d ", b[i]);
    
    printf("\n\n");
}

여기까지 작성 완료하였다면, 지금부터는 두 배열의 값을 서로 맞바꾸는 함수를 작성해보자.

이것의 작성이 이 문제의 출제 의도라 할 수 있는데, 문제에 정수형 배열을 매개변수로 전달받으라는 조건이 있으므로 이를 위해 먼저 매개변수의 형을 포인터 형으로 설정하자.

void swap_array(int* a, int* b) {

}

그 후 배열의 원소를 임시 저장할 수 있는 temp라는 변수를 하나 생성해준다.

temp 변수의 자료형은 무엇이어야 하는가?

당연히 배열의 원소의 값의 자료형이 int형이므로 int형이다.

(우리는 배열의 원소의 값을 서로 바꿔줘야 하므로)

void swap_array(int* a, int* b) {
    int temp;
}

a와 b 배열 모두 길이가 5이므로 5번 반복을 진행하면서 a 배열의 원소의 값을 b 배열의 원소의 값과 맞바꿔줘야 한다.

또한 위에서 설명했던 바와 같이 인덱스 번호는 0부터 시작하므로 0~4까지의 반복문으로 작성해주자.

이들을 코드로 보이면 다음과 같다.

void swap_array(int* a, int* b) {
    int temp;

    for(int i=0; i<5; i++) {
        temp = a[i];    // a[i]의 값을 temp에 저장한다.
        a[i] = b[i];    // b[i]의 값을 a[i]에 저장한다.
        b[i] = temp;    // 마지막으로 위에서 a[i]의 값을 저장해두었던 temp의 값을 b[i]에 저장한다.
    }
}

temp라는 변수를 설정한 이유가 이해가 가지 않을 수 있다.

이는 우리가 살고 있는 세상에 빗대어 이해하면 조금 더 쉽게 이해할 수 있는데, 예를 들어 우리가 a 접시의 음식과 b 접시의 음식을 서로 맞바꿔야 하는 문제 상황에 처했다고 가정해보자. (물론 이때 전제조건으로서 또 다른 접시의 사용이 가능하다.)

이에 대한 필자의 생각은 다음과 같다.

“또 다른 접시의 사용이 가능하므로 c라는 접시를 하나 더 마련하여 여기에 a, b 두 접시 중 하나의 음식을 c 접시에 먼저 담아두고 서로의 음식을 맞바꾼 뒤, 마지막으로 c의 접시의 음식을 남은 접시에 담는다.”

그러면 독자 여러분은 어떤 선택을 하겠는가? (더 좋은 생각을 가지고 계시다면 댓글 남겨주세요.)

마지막으로 main 함수에서 swap_array의 함수 호출문과 나머지 출력 결과에 대한 적절한 출력문까지 구성해주면 끝이다.

이를 전체 코드로 보이면 다음과 같다.

#include <stdio.h>

void swap_array(int* a, int* b) {
    int temp;

    for(int i=0; i<5; i++) {
        temp = a[i];
        a[i] = b[i];
        b[i] = temp;
    }
}

int main() {
    int a[5] = {1, 3, 5, 7, 9};
    int b[5] = {0, 2, 4, 6, 8};

    printf("a 배열: ");

    for(int i=0; i<5; i++)
        printf("%d ", a[i]);

    printf("\n");

    printf("b 배열: ");

    for(int i=0; i<5; i++)
        printf("%d ", b[i]);

    printf("\n\n");

    swap_array(a, b);

    printf("<< swap_array 호출 후 >>\n");

    printf("a 배열: ");

    for(int i=0; i<5; i++)
        printf("%d ", a[i]);

    printf("\n");

    printf("b 배열: ");

    for(int i=0; i<5; i++)
        printf("%d ", b[i]);

    printf("\n");

    return 0;
}

댓글남기기