문제 개요
C 언어로 프로그램을 작성하여, 실행 시간(런타임)에 사용자가 입력한 배열 안에서 특정 요소를 검색하고 그 결과를 화면에 출력해야 합니다. 만약 검색하려는 요소가 배열에 존재하지 않는다면 "요소를 찾을 수 없다"는 메시지를 표시하도록 합니다.
해결 방법
배열(Array)은 성격이 같은 여러 데이터를 하나의 이름 아래 묶어서 관리할 수 있는 자료구조입니다.
배열에서 수행할 수 있는 대표적인 연산은 다음과 같습니다.
- 삽입(Insert)
- 삭제(Delete)
- 검색(Search)
알고리즘
포인터를 이용해 배열 내부의 요소를 검색하는 절차는 다음과 같습니다.
1단계 − 요소의 개수를 선언하고 입력받습니다.
2단계 − 런타임에 배열의 크기를 선언하고 입력받습니다.
3단계 − 배열의 각 요소를 입력받습니다.
4단계 − 포인터 변수를 선언합니다.
5단계 − 런타임에 메모리를 동적으로 할당합니다.
6단계 − 검색할 요소를 입력받습니다.
7단계 − 배열을 순회(traverse)하며 해당 요소가 존재하는지 확인합니다. 요소가 발견되면 "Yes"(존재함)를, 발견되지 않으면 "No"(존재하지 않음)를 출력합니다.
예제
배열의 크기: 5
배열의 요소는 다음과 같습니다.
1 2 3 4 5
검색할 요소 입력: 4
출력 결과는 다음과 같습니다.
4 is present in the array
예제 코드
다음은 포인터를 활용하여 배열에서 요소를 검색하는 C 프로그램입니다.
#include<stdio.h>
int i,l;
int search(int ,int *,int);
int main(){
int n,m;
printf("enter the size of array:");
scanf("%d",&n);
int a[n];
printf("enter the elements:\n");
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
printf("enter the element to be searched:");
scanf("%d",&m);
search(n,a,m);
return 0;
}
int search(int n,int *a,int m){
for(i=0;i<n;i++){
if(m==a[i]){
l=1;
break;
}
}
if(l==1){
printf("%d is present in the array",m);
} else {
printf("%d is not present in the array",m);
}
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Run 1: enter the size of array:5 enter the elements: 14 12 11 45 23 enter the element to be searched:11 11 is present in the array Run 2: enter the size of array:3 enter the elements: 12 13 14 enter the element to be searched:45 45 is not present in the array
코드 설명
이 프로그램의 핵심 동작 원리는 다음과 같습니다.
- 가변 길이 배열(VLA):
int a[n]처럼 런타임에 입력받은 크기로 배열을 선언하여, 사용자가 지정한 크기만큼만 메모리를 사용합니다. - 포인터 매개변수:
search()함수는 배열 이름a를 인자로 받는데, 이때 배열 이름은 첫 번째 요소의 주소를 가리키는 포인터(int *a)로 전달됩니다. - 선형 검색: 함수 내부에서는 인덱스 0부터 n-1까지 배열을 순회하며 검색값
m과 일치하는 요소가 있는지 비교합니다. - 플래그 변수: 일치하는 요소를 찾으면
l=1로 설정하고break로 반복을 종료하여 불필요한 비교를 줄입니다.