cyphen156

백준-1차원 배열 2562 최댓값 본문

컴퓨터공학/알고리듬 풀이

백준-1차원 배열 2562 최댓값

cyphen156 2024. 9. 10. 13:03

2562번: 최댓값 (acmicpc.net)

 

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

제약사항

  • 0 < INPUT < 100

주의 사항

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

C 풀이

최댓값_2562.c

이전 문제와 같이 비효율적인 방식을 유지하였다. 

/**
* 백준 1차원 배열 2562 최댓값
* 9개의 서로 다른 자연수가 주어질 때 최댓값을 찾고 몇번째 수인지 구하는 프로그램을 작성하시오.
* 입력과 동시에 MAX값 비교, 순서 저장
*
* 제한사항
*****************************************
* 0 < INPUT < 100                       *
*****************************************
*
*
*
* 주의
* 첫째 줄에 최댓값을 출력하고, 둘째 줄에 몇번째 수인지 출력한다.
*
* 풀이시간 5분
*/
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    int INPUT, MAX = 0, cnt = 0;
    vector<int> arr;
    
    for (int i = 0; i < 9; ++i)
    {
        cin >> INPUT;
        if (INPUT > MAX)
        {
            MAX = INPUT;
            cnt = i+1;
        }
    }

    cout << MAX << "\n" << cnt;
    return 0;
}

C++ 풀이

최댓값_2562.cpp

/**
* 백준 1차원 배열 2562 최댓값
* 9개의 서로 다른 자연수가 주어질 때 최댓값을 찾고 몇번째 수인지 구하는 프로그램을 작성하시오.
* 입력과 동시에 MAX값 비교, 순서 저장
*
* 제한사항
*****************************************
* 0 < INPUT < 100                       *
*****************************************
*
*
*
* 주의
* 첫째 줄에 최댓값을 출력하고, 둘째 줄에 몇번째 수인지 출력한다.
*
* 풀이시간 5분
*/
#include <iostream>

using namespace std;

int main(void)
{
    int INPUT, MAX = 0, cnt = 0;

    for (int i = 0; i < 9; ++i)
    {
        cin >> INPUT;
        if (INPUT > MAX)
        {
            MAX = INPUT;
            cnt = i+1;
        }
    }

    cout << MAX << "\n" << cnt;
    return 0;
}

여기서 추가로 고려해야 할 점은 만약 입력된 수중 같은수가 2번 이상 나온 경우이다.

현재의 방식은 cnt변수를 통해 위치를 제어하는데 하나의 위치만을 표시할 수 있다는 점이다.

예를 들어 입력값이 3 29 38 85 57 74 40 85 61와 같이 중복이 생기는 경우를 처리하려면 

두 위치중 한가지 위치는 버리거나 추가 배열을 통해 위치정보를 저장해야 한다. 

현재의 조건에서는 다음과 같은 입력의 경우 결과가 4로 출력되고, 

조건문에 비교 연산을 >=로 변환 한다면 출력 결과가 8이 된다.

위치 정보를 저장하는 경우 4와 8 모두를 출력할 수 있으니 다음과정을 통해 처리하도록하겠다.

최댓값_2562_plus.cpp

/**
* 백준 1차원 배열 2562 최댓값
* 9개의 서로 다른 자연수가 주어질 때 최댓값을 찾고 몇번째 수인지 구하는 프로그램을 작성하시오.
* 입력과 동시에 MAX값 비교, 순서 저장
*
* 제한사항
*****************************************
* 0 < INPUT < 100                       *
*****************************************
*
*
*
* 주의
* 첫째 줄에 최댓값을 출력하고, 둘째 줄에 몇번째 수인지 출력한다.
*
* 풀이시간 5분
*/
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    int INPUT, MAX = 0;
    vector<int> position;

    for (int i = 0; i < 9; ++i)
    {
        cin >> INPUT;
        if (INPUT > MAX)
        {
            MAX = INPUT;
            position.clear();
            position.push_back(i + 1);    
        }
        else if (INPUT == MAX)
        {
            position.push_back(i + 1);  // 중복된 최댓값의 위치 저장
        }
    }

    cout << MAX << "\n";
    for (int pos : position)
    { 
        cout << pos << " ";
    }
    cout << endl;
    return 0;
}

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

Workspace/알고리듬 풀이 at main · cyphen156/Workspace · GitHub

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com