문제 개요
배열에서 중복되지 않는 고유한 요소를 찾으려면 두 개의 루프를 사용합니다. 외부 루프는 현재 요소를 하나씩 선택하고, 내부 루프는 해당 요소와 같은 값이 배열의 다른 위치에 이미 존재하는지 검사합니다.
예시
다음 예시를 살펴보겠습니다.
15, 15, 16, 15, 13, 15
위 배열에서 중복되지 않는 요소는 16과 13입니다.
알고리즘
배열에서 고유한(중복되지 않는) 요소를 찾는 알고리즘은 다음과 같습니다.
- 배열을 선언하고, 실행 시점에 사용자로부터 배열 요소를 입력받습니다.
- 배열을 순회하면서 현재 요소가 배열의 다른 위치에 이미 존재하는지 확인합니다.
- 이미 존재한다면 다음 요소로 이동하여 계속 진행합니다.
- 존재하지 않는다면 해당 요소를 중복되지 않는 요소로 출력합니다.
동작 원리
내부 루프가 배열의 끝까지(j == n) 완료되었다는 것은 현재 요소와 동일한 값이 배열에 없다는 의미이므로, 그 요소를 고유한 요소로 출력합니다. 이 방법의 시간 복잡도는 O(n²)으로, 작은 크기의 배열에 적합합니다.
C 프로그램 예제
다음은 배열에서 고유한 요소를 찾는 C 프로그램입니다.
#include <stdio.h>
#include <stdlib.h>
int uniqueEle(int array[], int n){
int i, j;
int count = 1;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if(array[i] == array[j] && i != j)
break;
}
if(j == n){
printf("\nunique elements in an array is [%d] : %d \n", count, array[i]);
++count;
}
}
return -1;
}
int main(){
int n, i;
printf("\nEnter no: of elements : ");
scanf("%d", &n);
int array[n];
printf("\nenter the array elements : ");
for(i = 0; i < n; i++){
scanf("%d", &array[i]);
}
uniqueEle(array, n);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Run 1: Enter no: of elements: 5 enter the array elements : 11 11 15 16 13 unique elements in an array is [1] : 15 unique elements in an array is [2] : 16 unique elements in an array is [3] : 13 Run 2: Enter no: of elements: 4 enter the array elements : 11 12 11 11 unique elements in an array is [1] : 12