학습(0)/C++ 문제풀이

프로.입문.최댓값 만들기

누가 뭐래도 개발자 2025. 2. 24. 22:25

1. 2중 for문 

 

코딩테스트에서는 대체로 이쪽의 효율이 좋다. (성능적으로 가볍다)

int solution(vector<int> numbers) {
    int answer = -1;
    size_t n = numbers.size();
    
    for (int i = 0; i < n; ++i)
    {
        for (int j = i + 1; j < n; ++j)
        {
            if (answer < numbers[i] * numbers[j])
                answer = numbers[i] * numbers[j];
        }
    }

    return answer;
}

 

2. next_permutation()를 이용한 조합

 

잘못한 부분

1. visit 을 정렬하지 않음.

2. combi를 초기화하지 않음.

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

using namespace std;

int solution(vector<int> numbers) {
    int answer = 0;
    size_t n = numbers.size();
    
    //1. 조합 구하기 nC2
    vector<int> visit(n, 0);
    visit[0] = 1, visit[1] = 1;

    sort(visit.begin(), visit.end());

    do
    {
        vector<int> combi;
        for (int i = 0; i < n; ++i)
        {
            if (1 == visit[i])
            {
                combi.push_back(numbers[i]);
            }
        }

        if (answer < combi[0] * combi[1])
            answer = combi[0] * combi[1];

    } while (next_permutation(visit.begin(), visit.end()));
    
     
    //2. 조합의 곱 중 최댓값 반환하기.
    return answer;
}

 

3. 그냥 직관적으로

 

정렬하여 제일 큰수와 그 다음수 곱하기.

 

오름차순.

answer = numbers[numbers.size()-2] * numbers[numbers.size()-1];

내림차순.

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

 

시간복잡도 

1. 2: O(N²)

3. O(nlogn)