[프로그래머스] 가장 큰 수 찾기 - c++

삼식이·2025년 5월 5일
0

알고리즘

목록 보기
42/81

가장 큰 수 찾기

이 문제는 간단한 문제이다. 하지만 풀이 후 다른사람의 풀이를 보고 나니
새롭게 알게 된 함수가 있어서 작성한다.

[기존 풀이]

#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]에는 최댓값의 인덱스가 담겨 반환된다.

0개의 댓글