본문 바로가기
코딩/백준

[BOJ / 백준] 10818 최소, 최대 - C언어

by 김두루미 2022. 8. 2.
반응형

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

문제 설명

해당 문제는 N개의 정수 중 최솟값과 최댓값을 찾아 출력하는 문제입니다.

 

단계별 풀어보기에서는 1차원 배열에 포함된 문제인데, 배열 없이 값이 입력될 때마다 비교하는 형식으로 진행하였습니다.

 

max 변수 : 지금까지 나온 정수 중 가장 큰 값을 저장하는 변수

min 변수 : 지금까지 나온 정수 중 가장 작은 값을 저장하는 변수

 

num에 정수 한 개를 입력 받은 후 max 변수보다 더 큰 값이면 새로운 최댓값이 나왔으니 max에 num의 값을 대입하고, min 변소보다 더 큰값이면 새로운 최솟값이 나왔으니 min에 num의 값을 대입하는 방식으로 해결하였습니다.

 

첫 반복의 경우 max, min 변수에는 쓰레기 값이 있으므로, 문제에서 나올 수 있는 정수의 범위 값(절대값 1,000,000)으로 초기화를 하였습니다. 

코드 (C언어)
#include <stdio.h>

int main(void)
{
	int i, n, num, max = -1000000, min = 1000000;
	
	scanf("%d", &n);
	
	for(i = 0; i < n; i++)
	{
		scanf("%d", &num);
		
		if(max < num)
		{
			max = num;
		}
		
		if(min > num)
		{
			min = num;
		}
	}
	
	printf("%d %d", min, max);
	
	return 0;
}

 

# 만약 숫자의 범위를 모르는 경우 아래의 코드처럼 첫 번째 입력받은 정수 값(i == 0 일때)으로 max, min 변수를 초기화 해주면 됩니다!

 

#include <stdio.h>

int main(void)
{
	int i, n, num, max, min;
	
	scanf("%d", &n);
	
	for(i = 0; i < n; i++)
	{
		scanf("%d", &num);
		
		//정수의 범위를 모르는 경우
		if(i == 0)
		{
			max = num;
			min = num; 
		} 
		else
		{
			if(max < num)
			{
				max = num;
			}
			
			if(min > num)
			{
				min = num;
			}
		}
	}
	
	printf("%d %d", min, max);
	
	return 0;
}

 

## max와 min을 비교하는 선택문에서 양 쪽 모두 if로 하지 않고, if, else if로 코드를 구성하게 되면, max 값이 갱신되는 경우 min 값을 확인 하는 코드가 실행되지 않습니다. 아래와 같은 값을 대입 하였을 때 min 값이 갱신 되지 않는 것을 볼 수 있습니다.

최솟값 비교를 else if로 한 경우 min 값이 갱신 되지 않는다.

#include <stdio.h>

int main(void)
{
	int i, n, num, max = -1000000, min = 1000000;
	
	scanf("%d", &n);
	
	for(i = 0; i < n; i++)
	{
		scanf("%d", &num);
		
		if(max < num)
		{
			max = num;
		}
		// 최댓값이 갱신되는(TRUE)인 경우 min을 비교하는 조건식이 실행되지 않는다. 
		else if(min > num)
		{
			min = num;
		}
	}
	
	printf("%d %d", min, max);
	
	return 0;
}
반응형