[백준 10818][🤎3] 최소, 최대
카테고리: BOJ
태그: Coding Test Cpp Algorithm
최소, 최대
10818번 문제 👉 https://www.acmicpc.net/problem/10818
난이도 👉 브론즈 3
1 차 풀이 ❌
#include <iostream>
using namespace std;
int main()
{
int n;
int temp;
int min = 1000000, max = -1000000;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> temp;
if (temp < min)
min = temp;
else if (temp > max)
max = temp;
}
cout << min << " " << max << endl;
}
- 이 풀이가 틀렸던 이유
- min, max 를 각각 문제에서 제시한 가장 큰 값(1000000), 가장 작은(-1000000) 값으로 초기화 하여 입력 값과 비교시 바로 min, max 값이 갱신될 수 있도록 하였는데
- 이런 경우
else if
를 쓰면 안된다.if
조건이 참이면else if
는 실행되지 않고 그냥 넘어가기 때문에- 반례 👉 n = 1인 경우
else if
이기 때문에 min 만 갱신되고 max 는 갱신되지 않는다. 따라서 min = 3, max = -1000000 인 채로 끝나게 된다.
- 반례 👉 n = 1인 경우
2 차 풀이 ⭕
#include <iostream>
using namespace std;
int main()
{
int n;
int temp;
int min = 1000000, max = -1000000;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> temp;
if (temp < min)
min = temp;
if (temp > max)
max = temp;
}
cout << min << " " << max << endl;
}
- min, max 를 각각 문제에서 제시한 가장 큰 값(1000000), 가장 작은(-1000000) 값으로 초기화 할 경우엔 else if 가 아닌 그냥 if 로 통일해야 한다.
- n = 1 일 경우 min, max 둘다 업뎃 될 수 있도록.
3 차 풀이 ⭕
#include <iostream>
using namespace std;
int main()
{
int n;
int * ptr;
int min, max;
cin >> n;
ptr = new int[n];
for(int i = 0; i < n; i++)
{
cin >> ptr[i];
}
min = ptr[0];
max = ptr[0];
for(int i = 0; i < n; i++)
{
if (ptr[i] < min)
min = ptr[i];
else if (ptr[i] > max)
max = ptr[i];
}
cout << min << " " << max << endl;
}
- 미리 입력 값들을 배열에 저장한 후 백만, -백만 으로 초기화 하는 것이 아닌
min = ptr[0]
,max = ptr[0]
으로 초기화 해둔다. 이러면 else if를 사용하더라도 n = 1 일때 문제가 없다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기