cyphen156
백준-1차원 배열 2562 최댓값 본문
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
'컴퓨터공학 > 알고리듬 풀이' 카테고리의 다른 글
백준-1차원 배열 10813 공 바꾸기 (1) | 2024.09.11 |
---|---|
백준-1차원 배열 10810 공 넣기 (0) | 2024.09.11 |
백준-1차원 배열 10818 최소, 최대 (0) | 2024.09.10 |
백준-1차원 배열 10871 X보다 작은 수 (0) | 2024.09.09 |
백준-1차원 배열-10807 개수 세기 (0) | 2024.09.09 |