이 문제는 간단한 문제이다. 하지만 풀이 후 다른사람의 풀이를 보고 나니
새롭게 알게 된 함수가 있어서 작성한다.
[기존 풀이]
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> array) {
vector<int> answer;
int ma = -1;
int in = -1;
for(int i=0; i<array.size(); i++) {
if (array[i] > ma) {
ma = array[i];
in = i;
}
}
answer.push_back(ma);
answer.push_back(in);
return answer;
}
[다른 풀이]
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> array) {
vector<int> answer;
auto t = max_element(array.begin(), array.end());
answer.push_back(*t);
answer.push_back(distance(array.begin(),t));
return answer;
}
코드를 분해해보자.
auto t = max_element(array.begin(), array.end());
✅ max_element란?
헤더파일 algorithm에 있는 표준 라이브러리 함수이다.
max_element(start, end)는 최댓값을 가리키는 반복자(iterator) 를 반환한다.
array.begin(): 벡터의 시작 반복자
array.end(): 벡터의 끝(마지막 원소 다음)을 가리키는 반복자
즉, 이 코드는 array에서 최댓값의 위치를 가리키는 반복자 t를 구하는 것이다.
💡 반복자(iterator) 는 "포인터처럼 동작하는 객체"로, 컨테이너 내부 원소에 접근할 수 있는 도구이다.
answer.push_back(*t);
✅ *t의 의미
t는 반복자(== 포인터처럼 동작)이고,
*t는 반복자가 가리키는 실제 값을 뜻한다.
즉, array 안에서 최댓값을 꺼내서 answer에 저장하는 것이다.
🔹 예시:
만약 t가 array[3]을 가리킨다면, *t == array[3] 이다.
answer.push_back(distance(array.begin(), t));
✅ distance(begin, t)의 의미
distance(a, b)는 두 반복자 사이의 거리(인덱스 차이) 를 구한다.
여기서는 t가 array의 몇 번째 원소인지를 계산하는 것이다.
즉, 문제에서 요구하는 최댓값의 인덱스 위치를 구하는 것이다.
return answer;
결과적으로 answer[0]에는 최댓값, answer[1]에는 최댓값의 인덱스가 담겨 반환된다.