당분간은 백준 오답노트를 진행하려고 한다.
오늘의 문제는 “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 값을 적절히 초기화해주면 정답이다.
이 문제는 쉬운 문제지만, 주어지는 입력의 범위를 제대로 읽지 않아서 틀렸다.