BOJ

[BOJ/C++] 2562

eunyeong 2021. 7. 10. 16:25

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

 

2562번: 최댓값

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

www.acmicpc.net

알고리즘을 작성할 때 최대인 경우와 최소인 경우를 체크해야 한다는 깨달음을 준 문제이다.

 

틀린 코드

#include<bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int max;
    int arr[9];
    int idx = 0;

    for (int i = 0; i < 9; i++) {
        cin >> arr[i];
    }
    max = arr[0];
    for (int i = 1; i < 9; i++) {
        if (max < arr[i]) { max = arr[i]; idx = i+1; }
    }
    cout << max << '\n' << idx;

    return 0;
}
    for (int i = 1; i < 9; i++) {
        if (max < arr[i]) { max = arr[i]; idx = i+1; }
    }

이 부분을 자세히 보자. idx=0으로 초기화 해놓은 상태이다.

예를 들어 100 1 2 3 4 5 6 7 8 일 때 (max 값은 arr[0]으로 초기화 해놓았으므로 100)

항상 max >arr[i] 이므로 idx=i+1; 코드가 실행되지 못하게 된다. 따라서 이 때 idx를 출력하면 0이 나오게 되어 틀린다.

 

맞은 코드

#include<bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int max;
    int arr[9];
    int idx = 0;

    for (int i = 0; i < 9; i++) {
        cin >> arr[i];
    }
    max = arr[0];
    for (int i = 1; i < 9; i++) {
        if (max < arr[i]) { max = arr[i]; idx = i; }
    }
    cout << max << '\n' << idx+1;

    return 0;
}

출력문에서 idx+1을 출력하게 하여 이 문제를 해결할 수 있다.

 

맞은 코드

#include<bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int max;
    int arr[9];
    int idx;

    for (int i = 0; i < 9; i++) {
        cin >> arr[i];
    }

    max = arr[0];
    idx = 1;
    for (int i = 1; i < 9; i++) {
        if (max < arr[i]) { max = arr[i]; idx = i + 1; }
    }

    cout << max << '\n' << idx;

    return 0;
}

또는 idx=1로 초기화하여 해결할 수 있다.