백준 2562번: 최댓값 (C++)
문제
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
- 입력
- 첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.
- 출력
- 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void){
vector<int> v;
for (int i = 1; i <= 9; i++){
int n;
cin >> n;
v.push_back(n);
}
int max = *max_element(v.begin(), v.end());
int max_index = max_element(v.begin(), v.end()) - v.begin();
cout << max << endl;
cout << max_index + 1 << endl;
return 0;
}
접근 및 풀이
이 문제는 vector
를 더 유용하게 쓰기 위해 vector
로 풀어보았다. 모든 수를 vector
에 집어넣은 뒤 vector
의 최댓값이나 최솟값을 직접 구하는 함수가 없는지 찾아보았는데, <algorithm>
헤더에 최댓값을 구하는 함수가 있었다.
max_element()
가 바로 그것인데, 이 링크를 확인해 보면 리턴값이 iterator인 것을 알 수 있다. iterator라고 해봤자 포인터라고 생각하면 된다. 이 리턴값이 최댓값을 가진 배열의 요소를 가리키는 포인터이기 때문에 바로 가져올 수는 없고 *iter
를 이용해 해당 값을 참조하여 가져와야 한다. 그리고 배열의 주소는 이어져 있기 때문에 인덱스 값을 가져올 때도 가장 첫 요소와 비교해서 가져올 수 있다.
댓글남기기