[boj] c언어 - 10818번(최소, 최대) 4단계 문제 - 1

peepeep_q·2022년 6월 20일
0

BOJ 문제풀이 - C언어

목록 보기
12/12
post-thumbnail

출처

링크텍스트

문제

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

입력

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

출력

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

소스코드

#include<stdio.h>
#include<limits.h>
int main() {
    int N;
    scanf("%d", &N);
    int max_value = INT_MIN; 
    int min_value = INT_MAX; 
    for (int i = 0; i < N; i++) { 
        int value; 
        scanf("%d", &value); 
        if (max_value < value) { 
            max_value = value;
        }
        if (min_value > value) {
            min_value = value;
        }
    }
    printf("%d %d\n", min_value,max_value);
    return 0;
}

풀이

#include<limits.h> : 자료형의 최댓값과 최솟값이 정의된 헤더파일

정수형 최댓값과 최솟값이 정의되어 있는 헤더파일을 작성한다. -> 왤까..?ㅎ
(아시는 분.. help...)

for문을 사용하여 먼저 입력받은 정수의 개수만큼 수를 입력받게 만들어준다.
for문 안에는 입력 받을 수를 넣어줄 자리인 value를 int로 지정해준 뒤, scanf를 사용하여 수를 입력받고 value로 넣어준다.
그 다음 if문을 사용하여 최댓값과 최솟값을 구하여준다.
먼저, for문을 들어오기 전에
int max_value = INT_MIN;
int min_value = INT_MAX;
로 수를 지정해주었다.
이를 보면 max_value에는 int 자료형의 최솟값이 들어가있고, min_value에는 int 자료형의 최댓값이 들어가있다.
따라서 if문으로 max_value < value를 적어 입력받은 value의 값이 더 크면 max_value=value로 입력받은 value의 값을 max_value에 넣어준다.
이와 같이 최솟값을 찾는 과정에도 if(min_value>value){min_value=value;}를 적어 min값과 입력받은 수를 비교하여 value의 값이 더 작으면 min자리에 넣어준다.

(기본지식이 없으니 설명이 어렵다... 내가 사용하는 단어나 표현이 맞는지 모르겠음;;
예를 들어 설명해보자)


예)
3
10 20 5
를 입력 받았다고 가정해보자.

3개의 수를 입력받고 그 수는 10, 20, 5인 것이다.

for문으로 넘어가
i=0
value=10
if (max_value < value) -> max_value에는 int자료형의 최솟값이 들어가 있으므로 value(10)이 더 크다.
{ max_value = value; } -> max_value는 10이 되었다.
if (min_value > value) -> min_value는 int자료형의 최댓값이 들어가 있으므로 value(10)이 더 작다.
{ min_value = value; } -> min_value는 10이 되었다.

i=1
value=20
if (max_value < value) -> max_value(10)보다 value(20) 값이 더 크다.
{ max_value = value; } -> max_value는 20이 되었다.
if (min_value > value) -> min_value(10)은 value(20)보다 작아 if문이 성립되지 않으므로 min_value는 바뀌지 않고 그대로 10을 유지한다.
{ min_value = value; } -> x

i=2
value=5
if (max_value < value) -> max_value(20)는 value(5)보다 값이 크므로 if문이 성립되지 않고 max_value(20) 값은 바뀌지 않는다.
{ max_value = value; } -> x
if (min_value > value) -> min_value(10)보다 value(5) 값이 작으므로 if문이 성립되어 min_value 값이 바뀌게 된다.
{ min_value = value; } -> min_value(5)

따라서
printf("%d %d\n", min_value,max_value);
로 출력하게 되면
5 20
으로 알맞은 최솟값과 최댓값이 출력되게 된다.


메모

코드를 한줄씩 실행시켜 돌아가는 순서와 원리를 조금이나마 알게 되었다.
코드 한줄씩 실행시키는 단축키 = F11 (비쥬얼 스튜디오)

0개의 댓글

관련 채용 정보