[백준 10818][🤎3] 최소, 최대

Date:     Updated:

카테고리:

태그:

최소, 최대

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 인 채로 끝나게 된다.


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 일때 문제가 없다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

BOJ 카테고리 내 다른 글 보러가기

댓글 남기기