문제의 소재
N개의 정수가 주어졌을 때, 최솟값과 최댓값을 출력하는 문제이다.
해답
전처리기 #define을 활용하였다. MAX(A,B), MIN(A,B)를 정의하여 두 수를 손쉽게 비교할 수 있었다. 처음 입력되는 수를 최댓값 max와 최솟값 min에 대입하고 수가 입력될 때 마다. 크기 판단을 하여 min, max를 구할 수 있었다.
#define MAX(A,B) (A>B ? A:B)는 전처리기로 컴파일러가 컴파일시 MAX(A,B)로 기재된 부분을 (A>B ? A:B)로 바꾸어준다. A>B ? A:B에서 ? 연산자는 앞에 적힌 변수(int형 변수는 0일 때 false, 0보다 크면 true로 변환된다.)나 수식이 true값일 경우 A를 출력하고 false이면 B를 출력한다. 마찬가지로 #define MIN(A,B) (A<B ? A:B)로 최솟값을 정의할 수 있다.
전처리기를 사용하면 코드를 그대로 치환한다. 띄어쓰기가 없거나, 연산자의 우선순위에 따라 결과가 다른 경우 예상하지 못한 결과가 나올 수 있다. 따라서 괄호를 같이 사용해주는 것이 안전하다.
// BOJ_10818.cpp
#include<iostream>
using namespace std;
#define MAX(A,B) (A>B ? A:B)
#define MIN(A,B) (A<B ? A:B)
int main()
{
int N, a;
int max, min;
cin.tie(NULL);
ios::sync_with_stdio(false);
cin>>N>>max;
min = max;
for(int i=0;i<N-1;i++)
{
cin>>a;
max = MAX(max,a);
min = MIN(min,a);
}
cout<<min<<" "<<max<<endl;
return 0;
}
반응형
댓글