정보처리기능사 실기 문제: 배열 정렬 함수 구현

  • 7 minutes to read

이 문제에서는 C 언어를 사용하여 주어진 배열을 오름차순으로 정렬하는 함수를 작성하고, 이 함수를 사용하여 배열을 정렬한 후 결과를 출력하는 프로그램을 작성하는 것이 목표입니다. 프로그램은 Allman 스타일로 코드를 구성하여 가독성을 높입니다.

#include <stdio.h>

void align(int a[])
{
    int temp;
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}

int main(void)
{
    int a[] = {85, 75, 50, 100, 95};
    align(a);
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", a[i]);
    }
}

해결 방법:

  1. #include <stdio.h>를 사용하여 표준 입출력 라이브러리를 포함합니다.
  2. align이라는 이름의 함수를 정의하여 배열 a를 매개변수로 받습니다. 이 함수는 배열 내의 요소를 오름차순으로 정렬하는 역할을 합니다.
  3. 함수 내에서 두 반복문을 사용하여 배열의 요소들을 비교하고, 조건에 따라 서로의 위치를 교환합니다. 이는 버블 정렬 알고리즘의 구현 예입니다.
  4. main 함수에서 정수 배열 a를 초기화하고, align 함수를 호출하여 배열을 정렬합니다.
  5. 정렬된 배열의 요소를 출력하기 위해 반복문을 사용하여 각 요소를 순회하고 printf 함수를 이용해 출력합니다.

이 문제는 배열을 정렬하는 기본적인 알고리즘인 버블 정렬의 구현과 함수의 정의 및 사용 방법을 이해하는 데 중점을 둡니다.

정보처리기사 실기 시험 기출 문제 - 배열 정렬

문제

다음 C 프로그램이 실행되었을 때의 동작을 설명하고, 출력 결과를 예측하시오.

소스 코드 파일명: array_sorting.c

#include <stdio.h>

void align(int a[]) {
    int temp;
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4 - i; j++)
            if (a[j] > a[j+1]) {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
}

main() {
    int a[] = { 85, 75, 50, 100, 95 };
    align(a);
    for (int i = 0; i < 5; i++)
        printf("%d ", a[i]);
}

입력 예시

이 프로그램은 사용자로부터 입력을 받지 않습니다.

출력 예시

50 75 85 95 100 

해설

이 프로그램은 버블 정렬 알고리즘을 사용하여 배열 a의 요소를 오름차순으로 정렬하고, 정렬된 배열을 출력합니다.

  1. align 함수는 주어진 배열 a를 인자로 받아 내부적으로 버블 정렬 알고리즘을 수행합니다. 이 알고리즘은 배열의 각 요소를 순차적으로 비교하고, 필요한 경우 인접한 요소끼리 위치를 교환하여 정렬합니다.
  2. 주어진 배열 a{ 85, 75, 50, 100, 95 }로 초기화됩니다.
  3. align(a); 함수 호출을 통해 배열 a가 정렬됩니다. 정렬 과정에서 배열의 요소들은 오름차순(낮은 값에서 높은 값으로)으로 재배치됩니다.
  4. 정렬된 배열은 for 루프를 통해 출력되며, 최종적으로 50 75 85 95 100의 순서로 출력됩니다.

이 프로그램은 기본적인 정렬 알고리즘 중 하나인 버블 정렬을 사용하여 배열 내 요소를 정렬하는 방법을 보여줍니다.

정보처리기능사 실기 문제: 최대 소수 약수 찾기

이 문제에서는 C 언어를 사용하여 주어진 숫자의 약수 중에서 가장 큰 소수를 찾아 출력하는 프로그램을 작성하는 것이 목표입니다. 이 과정에서 소수를 판별하는 함수 isPrime과 이 함수를 활용하여 최대 소수 약수를 찾는 알고리즘에 대해 이해해야 합니다.

#include <stdio.h> 

int isPrime(int number)
{
    for (int i = 2; i < number; i++)
    {
        if (number % i == 0) return 0;
    }
    return 1;
}

int main()
{
    int number = 13195;
    int max_div = 0;
    for (int i = 2; i < number; i++)
    {
        if (isPrime(i) == 1 && number % i == 0) max_div = i;
    }
    printf("%d", max_div);
}

해결 방법:

  1. #include <stdio.h>를 사용하여 표준 입출력 라이브러리를 포함합니다.
  2. isPrime 함수를 정의하여 주어진 숫자가 소수인지 판별합니다. 이 함수는 2부터 숫자 전까지의 모든 수로 나누어보고, 나누어 떨어지는 수가 있으면 0을 반환하여 소수가 아님을 나타냅니다. 나누어 떨어지는 수가 없다면 1을 반환하여 소수임을 나타냅니다.
  3. main 함수에서 주어진 숫자 number에 대하여 2부터 시작하여 number까지 모든 수를 순회하며, 각 숫자가 number의 약수이면서 소수인지를 isPrime 함수를 호출하여 확인합니다.
  4. 조건을 만족하는 약수 중에서 가장 큰 값을 max_div에 저장합니다.
  5. 반복문이 종료되면, max_div에 저장된 최대 소수 약수를 printf 함수를 사용하여 출력합니다.

이 문제는 소수 판별 알고리즘과 반복문을 사용하여 주어진 숫자의 약수 중에서 가장 큰 소수 약수를 찾는 방법을 이해하는 데 중점을 둡니다. 복잡한 문제를 해결하기 위한 알고리즘 구현 능력과 소수 판별 기법의 활용이 중요한 포인트입니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com