❔문제: 백준 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

✍️풀이

C 코드

1번째 제출(틀림)

#include <stdio.h>
int main() {
    int A[9];
    int max=0, i, m;
    for (i=0; i<9; i++) 
        scanf("%d", &A[i]);
    for (i=0; i<9; i++) {
        if (A[i]>max) {
            max=A[i];
            m=i;
        }
    }
    printf("%d\n", max);
    printf("%d", m);
    return 0;
}

왜 틀렸지 한참 고민하다가 도저히 모르겠어서 인터넷에 답 찾아봄ㅠㅠ
뭐가 틀렸는지 아시겠나요?? 배열 인덱스 생각해보면 바로 답이 나옵니다ㅎ

2번째 코드(맞음)

#include <stdio.h>
int main() {
    int A[9];
    int m, i, max=0;
    for (i=0; i<9; i++) {
        scanf("%d", &A[i]);
        if (A[i]>max) {
            max=A[i];
            m=i;
        }
    }    
    printf("%d\n%d", max, m+1);
    return 0;
}

index를 출력하라고 한 게 아니라
몇 번째 수인지를 출력하라 했으니
인덱스가 m이라면 m+1번째 수가 되니
m이 아니라 m+1을 출력해줬어야 하는 것!!
내가 본 코드가 내가 짰던 코드보다 훨씬 효율적인 것 같다.

C++ 코드

#include <iostream>
using namespace std;
int main() {
    int A[9];
    int i, m, max=0;
    for (i=0; i<9; i++){
        cin >> A[i];
        if (max<A[i]){
            max = A[i];
            m = i;
        }
    }
    cout << max << '\n' << m+1;
    return 0;
}
profile
mbeCoder

0개의 댓글

Powered by GraphCDN, the GraphQL CDN