백준 10818 최소, 최대

리얼니트·2021년 9월 8일
0

1학년

목록 보기
10/24
post-thumbnail

https://www.acmicpc.net/problem/10818

처음에 굉장히 쉬워보여서 쭉쭉 코드를 써내려갔다.

#include <stdio.h>
int main(void){
    int num=0, max=0, min=0;
    scanf("%d",&num);
    int arr[num];
    for(int i=0; i<num; i++){
        scanf("%d",&arr[i]);
        if(max<arr[i]) max=arr[i];
        if(min>arr[i]) min=arr[i];
    }
    printf("%d %d",min,max);
    return 0;
}

이렇게 하니까 최댓값은 잘 구해지는데 최솟값이 자꾸 처음에 초기화 시킨 값인 0으로만 출력이 되었다.

입력한 값들 중 0보다 작은 값이 없으면 최솟값이 0이 나올 수밖에 없는 코드였다.
그러면 최솟값의 초기값을 얼마로 설정해야 할까?

다시 문제를 읽어보니 '모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.' 라는 조건이 눈에 들어왔다.
최솟값을 -1,000,000으로 잡으면 그거보다 낮은 값을 입력해야 최솟값이 갱신이 되는데 그러면 조건에 맞지 않으므로 최솟값의 초기값을 1,000,000으로, 최댓값의 초기값을 -1,000,000으로 두었다. 이렇게 하면 입력했던 값들이 전부 음수라고 하더라도 의도대로 코드가 출력 될 것이다.

#include <stdio.h>
int main(void){
    int num=0, max=-1000000, min=1000000;
    scanf("%d",&num);
    int arr[num];
    for(int i=0; i<num; i++){
        scanf("%d",&arr[i]);
        if(max<arr[i]) max=arr[i];
        if(min>arr[i]) min=arr[i];
    }
    printf("%d %d",min,max);
    return 0;
}

정상적으로 값이 나왔다. 값을 입력받는 문제를 풀때는 조건을 잘 확인하고 항상 극단적인 값을 입력할 때의 경우까지 생각하도록 하자.

profile
방구석에서 잘 살아요

0개의 댓글