coding_test/BAEKJOON

백준 2562번 C언어 풀이

CodeJin 2021. 8. 3. 20:38

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

 

2562번: 최댓값

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

www.acmicpc.net

입력받은 9개의 자연수중 최댓값을 찾고, 그 수가 몇번째로 입력되었는지 출력하는 간단한 문제.

 

하지만 간단할수록 실수하는 버릇은 좀 고쳐야겠다.

 

처음 풀이는 다음과 같았다.

#include<stdio.h>

int main(){
    int arr[9]; // 길이 9의 int형 배열 선언
    int max = 0; // 최댓값을 찾을 int형 변수
    int idx; // max의 위치를 찾을 int형 변수
    
    for(int i = 0; i < 9; i++){
        scanf("%d", &arr[i]); // 정수를 입력받아 arr[i]에 저장
        max = max > arr[i] ? max : arr[i]; // max보다 클 경우 arr[i]를 max에 대입
        idx = i; // 위치를 idx에 넣는다
    }
    printf("%d\n%d", max, idx);
    return 0;
}

프로그래밍좀 해본 사람은 금방 눈치 챌 것이다. 당연히 틀릴 것이다.

 

최댓값인 경우에만 idx에 i값을 넣어야 하는데 참, 거짓 상관없이 넣어서 idx값이 무조건 8이 된다.

 

그런데 하필 입력 예제 출력과 결과가 똑같게 나와서 필자는 아무생각없이 맞았다고 생각했다.

 

이를 깨달았고 다음과 같이 작성하여 맞았다.

 

#include<stdio.h>

int main(){
    int arr[9]; // 길이 9의 int형 배열 선언
    int max = 0; // 최댓값을 찾을 int형 변수
    int idx; // max의 위치를 찾을 int형 변수

    for(int i = 0; i < 9; i++){
        scanf("%d", &arr[i]); // 정수를 입력받아 arr[i]에 저장
        if (max < arr[i]) { // max보다 클 경우
            max = arr[i]; // arr[i]를 max에 대입
            idx = i+1; // i+1을 idx에 대입. (배열의 인덱스 + 1 = n번째)
        }
    }
    printf("%d\n%d", max, idx);
    return 0;
}