티스토리 뷰

[Blog] 백준(BaeKJoon): 최댓값(2562번)

문제

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.

예를 들어, 서로 다른 9개의 자연수

3, 29, 38, 12, 57, 74, 40, 85, 61

이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

입력

첫 째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

예제 입력 1

3
29
38
12
57
74
40
85
61

예제 출력 1

85
8

출처: Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2007 > 초등부 1번

해설

단순히 최댓값을 찾기 위해서라면 배열을 사욥할 이유는 없다. 몇 번째 입력된 수가 최댓값인지를 저장하기 위해 배열을 이용했다. 정확히는 배열의 첨자를 이용한 것이다. 대소 비교를 할 자연수가 아홉 개로 정해졌기에 for 문을 사용했고 이때의 변수 i를 배열의 첨자로 이용한 것이다. 입력한 수와 이전 입력한 수의 대소를 비교하여 큰 수를 max에 저장하고 이때의 배열 첨자를 flag에 저장해 두도록 하였다. 최댓값이 입력된 수의 차례를 출력할 때 +1을 해 주어야 한다는 점에 유의하자.

소스 코드 C

#include <stdio.h>

int main(int argc, char *argv[])
{
    int nums[9];
    int flag, i, max = 0;
    for (i = 0; i < 9; ++i) {
        scanf("%d", &nums[i]);
        if (max < nums[i]) {
            max =nums[i];
            flag = i;
        }
    }
    printf("%d\n", max);
    printf("%d\n", flag + 1);

    return 0;
}

굳이 배열을 사용하지 않고 아래와 같이 코딩할 수 있다. 이때는 for 문이 아닌 while 문을 이용했고 정수형 변수를 4개만 이용하였다. 메모리 사용에서면 차이가 있을뿐이다.

     int num, flag, max = 0;
     int times = 0;
     while (times < 9) {
         scanf("%d", &num);
         if ( max < num) {
             max = num;
             flag = times;
         }
         times++;
     }

소스 코드 Python

max_num = 0
for i in range(1, 10):
    num = int(input())
    if max_num < num:
        max_num = num
        flag = i

print(max_num)
print(flag)

입력을 리스트에 넣어서 내장 함수 max()를 사용하는 방법도 있으나 최댓값이 입력된 차례를 구하기 위해서는 리스트 원소의 위치를 따로 구해야 한다는 점에서 위 코드와 비교해 큰 이점이 있을 거 같지는 않다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
05-19 00:14