PS/백준

[백준/Baekjoon]<10818번> 최소, 최대 [C/C++/Python][Class 1]

DigIT_JHB 2022. 7. 29. 08:40

문제

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.


입력

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


출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.


예제 입력 1

5
20 10 35 30 7

예제 출력 1

7 35

#문제 풀이 방법

1. 정수 N과 N개의 숫자들이 입력된다.(-1,000,000≤(정수)≤1,000,000)

2.최솟값과 최댓값을 출력한다.

3-1. 숫자들이 입력될 때마다 기존의 최솟값과 최댓값을 비교해서 값들을 갱신한다.

→ ①값들을 비교할 때는 조건문을 이용할 수도 있고

 ②STL 또는 내장 함수를 이용할 수도 있을 것이다.

 

3-2. list or array or vector에서 바로 최솟값과 최댓값을 찾는다.

 

 

++)파이썬으로 여러방법으로 문제 풀다 추가적으로 생각난 것이 있다.

 파이썬에서 N개의 숫자들을 입력받아 리스트로 저장하는 것이 대부분일 것 같은데,

리스트를 정렬하고 맨 처음 값과 맨 마지막 값을 출력하면 된다.

 위와 같은 방법을 C++에서도 array이나 vector을 이용해 동일하게 사용할 수 있을 것이다.

 

 

#C/C++

#include <iostream>
#define MIN 1000000//정수의 최솟값이 -1000000
#define MAX -1000000//정수의 최댓값이 +1000000
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin>>N;
    int min=MIN;
    int max=MAX;
    for(int i=0;i<N;i++)
    {
        int a;
        cin>>a;
        if(a>max)//최댓값 비교
        {
            max=a;
        }
        if(a<min)//최솟값 비교
        {
            min=a;
        }
    }
    cout<<min<<' '<<max;
    return 0;
}
#include <iostream>
#include <algorithm>//algorithm 헤더파일 이용
#define MIN 1000000
#define MAX -1000000
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin>>N;
    int Min=MIN;
    int Max=MAX;
    for(int i=0;i<N;i++)
    {
        int a;
        cin>>a;
        Min=min(Min,a);//최솟값
        Max=max(Max,a);//최댓값
    }
    cout<<Min<<' '<<Max;
    return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin>>N;
    vector<int> v;
    for(int i=0;i<N;i++)
    {
        int a;
        cin>>a;
        v.push_back(a);          
    }
    cout<<*min_element(v.begin(),v.end())<<' '<<*max_element(v.begin(),v.end());//min_element,max_element이용하여 풀기!
    
}
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin>>N;
    int *n=new int[N];//동적할당
    for(int i=0;i<N;i++)
    {
        cin>>n[i];
    }
    cout<<*min_element(n,n+N)<<' '<<*max_element(n,n+N);//min_element,max_element이용하여 값 구하기
    delete n;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin>>N;
    vector<int> v;
    for(int i=0;i<N;i++)
    {
        int a;
        cin>>a;
        v.push_back(a);          
    }
    sort(v.begin(),v.end()); //벡터 정렬
    cout<<v.front()<<' '<<v.back();//정렬된 벡터의 첫번째 원소와 마지막 원소 출력
    
}
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin>>N;
    int *n=new int[N];//동적할당
    for(int i=0;i<N;i++)
    {
        cin>>n[i];
    }
    sort(n,n+N);  
    cout<<n[0]<<' '<<n[N-1];    
    delete n;
}

 

#Python

N=int(input())
ls=list(map(int,input().split()))
Min=ls[0]
Max=ls[0]
for i in ls:
    if i>Max:#최댓값
        Max=i
    elif i<Min:#최솟값
        Min=i
print(Min,Max)
N=int(input())
ls=list(map(int,input().split()))
print(min(ls),max(ls))#min,max함수 이용
N=int(input())
ls=list(map(int,input().split()))
ls.sort()#리스트 정렬
print(ls[0],ls[N-1])

 

반응형