[C언어] 배열의 두 번째로 작은 요소를 찾는 3가지 방법
오늘의 주제는 배열에서 두 번째로 작은 요소를 찾는 3가지 방법에 대해 포스팅해보겠습니다.
배열에서 두 번째로 작은 요소를 찾는 3가지 방법은 다음과 같습니다.
-1. 오름차순으로 정렬된 배열의 두 번째 요소 확인
-2. 배열을 두 번 순회하여 처음엔 가장 작은, 두 번째 순회에 두 번째로 작은 요소 확인
-3. 2개의 변수로 배열을 순회
1. 배열의 두 번째로 작은 값 찾기 1
배열의 두 번째로 작은 값을 찾는 첫 번째 방법은 오름차순으로 정렬된 배열의 두 번째 요소를 확인하는 것입니다.
1. 입력받은 배열을 오름차순 정렬.
2. Arr[1]의 요소에 접근( 배열은 0부터 시작 )
순으로 동작하게 됩니다.
코드:
//두 번째로 작은 배열 값 찾기.1
#include<stdio.h>
#define ArrLEN 7
int main()
{
int arr[ArrLEN] = {4,9,3,2,11,5,7};
printf("\n 정렬 되지 않은 배열 : ");
for(int i = 0; i < ArrLEN; i++)
{
printf("%d ",arr[i]);
}
//오름차순 정렬
for (int i = 0; i < ArrLEN-1; i++)
{
for (int j = 0; j < ArrLEN-i-1; j++)
{
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
printf("\n 정렬 된 배열 : ");
for(int i = 0; i < ArrLEN; i++)
{
printf("%d ",arr[i]);
}
printf("\n 두 번째로 작은 배열 값: %d \n",arr[1]);
return 0;
}
|
2. 배열의 두 번째로 작은 값 찾기 2
배열의 두 번째로 작은 값을 찾는 두 번째 방법은 배열을 두 번 순회하여 처음엔 가장 작은, 두 번째 순회에 두 번째로 작은 요소 확인하는 것입니다.
1. 첫 번째 순환(for문)에서 가장 작은 배열 값 확인
2. 1. 번을 제외한 가장 작은 배열 값 확인
//두 번째로 작은 배열 값 찾기.2
#include<stdio.h>
#include <limits.h>
#define ArrLEN 7
int main()
{
int arr[ArrLEN] = {4,9,3,2,11,5,7};
printf("\n 배열 : ");
for(int i = 0; i < ArrLEN; i++)
{
printf("%d ",arr[i]);
}
//순환
int min = INT_MAX;
int second_min = INT_MAX ;
for(int i = 0; i < ArrLEN; i++)
{
if(arr[i] < min)
{
second_min = min;
min = arr[i];
}
}
printf("\n 첫 번째로 작은 배열 값: %d \n",min);
for(int i = 0; i < ArrLEN; i++)
{
if(arr[i] < second_min && arr[i] != min)
{
second_min = arr[i];
}
}
printf("두 번째로 작은 배열 값: %d \n",second_min);
return 0;
}
|
첫 번째 반복문으로 가장 작은 배열 값을 찾습니다.
for(int i = 0; i < ArrLEN; i++)
{
if(arr[i] < min)
{
second_min = min;
min = arr[i];
}
}
min과 second_min 은 int형의 MAX 값으로 초기화되어 있습니다.
arr[i] < min 일 경우 min의 값은 arr[i]로 업데이트되며 이전 min 값은 second_min이 갖게 됩니다.
제가 예로 든 int arr[ArrLEN] = {4,9,3,2,11,5,7};의 경우 second_min이 바로 두 번째로 작은 값을 갖게 되지만 만약
배열의 첫 번째 요소가 가장 작은 값이라면 second_min은 업데이트되지 못하고 가장 작은 값만 갖게 됩니다.
그러므로 두 번째 반복문에서 두 번째로 작은 값을 찾게 됩니다.
for(int i = 0; i < ArrLEN; i++)
{
if(arr[i] < second_min && arr[i] != min)
{
second_min = arr[i];
}
}
arr[i] < second_min : 마찬가지로 second_min 보다 작은 값을 찾는데 여기에 and 연산으로 (&& arr[i] != min) 가장 작은 값과 같지 않은 값을 찾아 줍니다.
3. 배열의 두 번째로 작은 값 찾기 3
세 번째 방법은 두 번째 방법의 반복문을 하나로 합친 것입니다.
if, else 문을 사용하여 두 반복문을 하나로 합쳐줍니다.
//두 번째로 작은 배열 값 찾기.3
#include<stdio.h>
#include <limits.h>
#define ArrLEN 7
int main()
{
int arr[ArrLEN] = {4,9,3,2,11,5,7};
printf("\n 배열 : ");
for(int i = 0; i < ArrLEN; i++)
{
printf("%d ",arr[i]);
}
//순환
int min = INT_MAX;
int second_min = INT_MAX ;
for(int i = 0; i < ArrLEN; i++)
{
if(arr[i] < min)
{
second_min = min;
min = arr[i];
}
else if(arr[i] < second_min && arr[i] != min)
{
second_min = arr[i];
}
}
printf("\n 첫 번째로 작은 배열 값: %d \n",min);
printf(" 두 번째로 작은 배열 값: %d \n",second_min);
return 0;
}
|
감사합니다.
'ET의 공부 > C언어' 카테고리의 다른 글
[C언어] 10진수를 2진수로 변환하는 방법 (0) | 2020.04.09 |
---|---|
[C언어] 두 배열을 정렬된 형태로 합치는 2가지 방법 (0) | 2020.04.05 |
[C언어]조건문 if와 else 사용하기 (0) | 2019.12.19 |
[C언어] do while 문 (0) | 2019.12.11 |
[C언어] 무한반복 while문 (0) | 2019.12.11 |