Lv 0. 최댓값 만들기(1)

https://school.programmers.co.kr/learn/courses/30/lessons/120847

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> numbers) {
    sort(numbers.begin(),numbers.end(),greater<>());
    return numbers[0]*numbers[1];
}

 

다른 사람의 풀이를 통해 보게된 풀이인데, sort를 사용하지 않고 푸는 풀이중에 재미난 풀이방법인것 같아서 첨부해본다. 

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> numbers) {
    int answer = 0;
    int max = 0, s_max = 0;

    for (int i: numbers){
        if(max <= i){
            s_max = max;
            max = i;
        }
        else if(s_max <= i){
            s_max = i;
        }
    }
    answer = max * s_max;
    return answer;
}

해당 로직을 보면, 가장 큰 값을 저장할 max, 그리고 그 다음 큰 값을 저장할 s_max를 선언하고, 

모든 numbers의 원소에 대해서 for(int i : numbers) 로 반복문을 돌면서, i가 max보다 크다면 max를 갱신하고 s_max를 갱신, 

만약 i가 max보다 크진 않지만 s_max보다 크다면 (else if (s_max<=i) 부분에 해당) s_max 의 값을 i 로 갱신하는 풀이이다. 

sort를 사용하지 않는 풀이라 마음에 든다. 이러한 방법이 있다는 것도 알아두도록 하자. 

 

  Comments,     Trackbacks