by CodeJin19
1 min read

Categories

Tags

당분간은 백준 오답노트를 진행하려고 한다.

오늘의 문제는 “10818번 최소, 최대”.

N개의 정수 중, 최솟값과 최댓값을 구하는 문제이다.

여기서 N은 1이상 1,000,000 이하의 정수이고, 그 외의 숫자들은 -1,000,000이상, 1,000,000이하의 정수이다.

#include <iostream>

using namespace std;

int main()
{
	int num, x;
	int min = 2100000000;            //최솟값을 찾기 위해 int형의 최댓값에 가까운 21억으로 설정
	int max = 0;                     //최댓값을 찾기 위해 0으로 설정

	cin >> num;

	for (int i = 0; i < num; i++)   //num만큼 x로 숫자를 입력받고, 벡터에 넣은 후 최댓값과 최솟값 최신화
	{
		cin >> x;

		if (x < min)
		{
			min = x;
		}

		if (max < x)
		{
			max = x;
		}
	}

	cout << min << " " << max << "\n";

	return 0;
}

이 경우, 숫자는 -1,000,000 이상, 1,000,000 이하가 나오는데,

최솟값을 찾기 위해 21억으로 초기화한 것은 문제가 없지만,

최댓값을 찾기 위해 0으로 초기화하는 경우 문제가 발생한다.

따라서, 입력이

1 -10

이 되면,

-10 -10

을 출력해야 하지만,

-10 0

을 출력해서 틀린다.

#include <iostream>

using namespace std;

int main()
{
	int num, x;
	int min = 1000010;               //최솟값을 찾기 위해 int형의 최댓값에 가까운 21억으로 설정
	int max = -1000010;              //최댓값을 찾기 위해 0으로 설정

	cin >> num;

	for (int i = 0; i < num; i++)   //num만큼 x로 숫자를 입력받고, 벡터에 넣은 후 최댓값과 최솟값 최신화
	{
		cin >> x;

		if (x < min)
		{
			min = x;
		}

		if (max < x)
		{
			max = x;
		}
	}

	cout << min << " " << max << "\n";

	return 0;
}

이렇게 min 값을 적절히 초기화해주면 정답이다.

이 문제는 쉬운 문제지만, 주어지는 입력의 범위를 제대로 읽지 않아서 틀렸다.