문제 바로가기
https://www.acmicpc.net/problem/10818
관련 알고리즘
- 해당 없음
정답 및 해설
정수 N개를 입력받아 그중 최솟값과 최댓값을 차례대로 출력하는 문제이다.
최솟값과 최댓값을 저장할 변수를 정의하고,
정수를 새로 입력받을 때마다 기존 값과 비교하여 업데이트하는 것으로 간단하게 해결할 수 있다.
이때 최솟값의 초기값은 입력할 수 있는 최대정수보다 큰 수,
최댓값의 초기값은 입력할 수 있는 최소정수보다 작은 수로 해야 한다.
최솟값의 경우만 살펴보도록 하자.
만약 초기값보다 작은 정수가 입력되지 않는다면 초기값이 출력되어 오답을 만들어낼 수 있다.
따라서 입력될 수 있는 모든 정수보다 큰 수(1,000,000)를 초과하는 수로 초기값을 설정해야 한다.
ex) 초기값을 100으로 설정했으나, 입력받은 수 중 100보다 작거나 같은 수가 없으면, 최솟값으로 100을 출력 > 오답!
C++
#include<bits/stdc++.h>
#define INF 987654321
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int N,num,MIN=INF,MAX=-INF;
cin>>N;
while(N--){
cin>>num;
MIN=min(num,MIN);
MAX=max(num,MAX);
}
cout<<MIN<<' '<<MAX;
}
Line | 해설 |
2 | define 매크로를 사용하여 987654321을 INF로 치환합니다.1) 1,000,000보다 큰 수 아무거나 사용해도 무관하지만 통상 987654321 혹은 1234567890을 많이 사용합니다. |
5~6 | 입력받는 정수가 최대 1백만개 이므로 빠른 입출력을 위해 ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);를 사용하였습니다.2) |
7 | 최솟값 변수 MIN을 정의하고 동시에 INF(987654321)로 초기화합니다. 최댓값 변수 MAX를 정의하고 동시에 -INF(-987654321)로 초기화합니다. |
8~10 | 정수의 개수 N을 입력받고 while(N--) 반복문을 이용하여 N개의 정수를 num변수에 입력받습니다. |
11~12 | 입력받은 정수 num을 기존 최소,최댓값인 MIN,MAX와 비교하여 값을 업데이트합니다. MIN은 기존 최솟값인 MIN과 새로 입력받은 num중 작은 값(min)으로, MAX는 기존 최댓값인 MAX와 새로 입력받은 num중 큰 값(max)으로 설정해줍니다.3) |
14 | 반복문이 끝난 후, 구한 최솟값과 최댓값을 출력합니다. |
1) #define 은 매크로라고 부릅니다. #define A B 는 해당 코드내에서 B를 A로 치환하여 사용할 것을 의미합니다.
#define INF 987654321 : 이 코드내에서 INF라는 값은 987654321을 뜻함.
2) ios::sync_with_stdio(0); 함수는 c언어의 stdio와 c++의 iostream을 동기화를 끊어주는 역할을 합니다.
cin.tie(0); 과 cout.tie(0); 은 cin과 cout의 묶음을 풀어주는 역할을 합니다.
결과적으로 프로그램의 입출력이 빨라지게 되는데 자세한 원리와 설명은 추후에 다루도록 하겠습니다.
3) min함수와 max함수는 <algorithm> 라이브러리에서 제공하는 함수입니다. 위 코드에서 사용한 <bits/stdc++.h>헤더파일내에 해당 라이브러리가 포함되어있어 따로 정의하지 않았지만, <iostream> 라이브러리만 정의했다면 <algorithm> 라이브러리를 따로 include 해주어야 합니다.
min(A,B) : A와 B중 작은 값을 반환해줍니다.
max(A,B) : A와 B중 큰 값을 반환해줍니다.
'Coding > BOJ' 카테고리의 다른 글
[BOJ 백준] 1018 - 체스판 다시 칠하기 (C++) (0) | 2023.11.16 |
---|---|
[BOJ 백준] 11720 - 숫자의 합 (C++ / Python) (0) | 2023.11.14 |
[BOJ 백준] 10809 - 알파벳 찾기 (C++) (0) | 2023.11.12 |
[BOJ 백준] 10250 - ACM 호텔 (C++ / Python) (1) | 2023.11.11 |
[BOJ 백준] 8958 - OX퀴즈 (C++) (0) | 2023.11.10 |