본문 바로가기
알고리즘(C++)

배열 - 두개 뽑아서 더해서 정렬하기

by 송파감자 2025. 1. 30.

1. 문제

/*
문제 : 
        - 오름차순으로 반환하는 솔루션함수만들기
        - 근데 이 넘버스 정수 배열에서 서로 다른 인덱스에 있는 2개 요소 뽑아 더해 만들 수 있는 모든 수로 만들어야함
*/

 

2. 내 접근

  • 역시나 못 풀었다...
  • 하지만 접근은 조금 해봤다. 아래와 같음
#include <vector>
#include <algorithm>

using namespace std;

//=========================================================================
vector<int> solution(vector<int> numbers) 
{
    // 일단 매개변수로 받은 넘버스 예시 5,4,3,2면 그 뒤에꺼랑 한개씩 짝지운다
    // 어케 짝 지우지? 5,4/5,3/5,2/4,3/4,2/3,2
    vector<int> NewV;
    int Count = numbers.size();
    while (--Count)
    {

    }
    // 그 다음 걔네 다 더 해서 배열 만든다. 9/8/7/7/6/5
    
    
    // 거의 중복된 숫자가 생길 거다. sort함수로 오름차순으로 정리해주고
    sort(numbers.begin(), numbers.end());
    // 그 다음 unique 함수로 새로운 NewEnd 정해주고
    auto NewEnd = unique(numbers.begin(), numbers.end());
    // 그 다음 벡터사이즈 resize 하는데 numbers.begin부터 NewEnd의 디스턴스로 리사이징해준다
    numbers.resize(distance(numbers.begin(), NewEnd));
    // 그리고 이 정리된 벡터를 반환해준다!    

    return numbers;
}
//=========================================================================
#include <iterator>
#include <iostream>
void print(vector<int> vec)
{
    copy(vec.begin(), vec.end(), std::ostream_iterator<int>(cout, " "));
    cout << endl;
}
//=========================================================================
int main()
{
    print(solution({ 2, 1, 3, 4, 1 }));     // 2 3 4 5 6 7 
    print(solution({ 5, 0, 2, 7 }));        // 2 5 7 9 12 

    return 0;
}

 

3. 정답

vector<int> solution(vector<int> numbers) 
{
    // 일단 매개변수로 받은 넘버스 예시 5,4,3,2면 그 뒤에꺼랑 한개씩 짝지운다
    // 어케 짝 지우지? 5,4/5,3/5,2/4,3/4,2/3,2
    vector<int> NewV;
    int Count = numbers.size();
    
    // 그 다음 걔네 다 더 해서 배열 만든다. 9/8/7/7/6/5
    for (int i = 0; i < Count; i++)
    {
        for (int j = i+1; j < Count; j++)
        {
            NewV.push_back(numbers[i] + numbers[j]);
        }
    }

    // sort함수로 오름차순으로 정리해주고
    sort(NewV.begin(), NewV.end());
    // 그 다음 unique 함수로 새로운 NewEnd 정해주고
    auto NewEnd = unique(NewV.begin(), NewV.end());
    // 그 다음 벡터사이즈 resize 하는데 numbers.begin부터 NewEnd의 디스턴스로 리사이징해준다
    NewV.resize(distance(NewV.begin(), NewEnd));
    // 그리고 이 정리된 벡터를 반환해준다!    

    return NewV;
}

 

4. 코멘트

  • 아...포문 쓰는 게 왜 아직 어려운걸까.
  • 그래도 성장했다. 아무것도 못 쓰다가 접근하는 방식을 생각했당

'알고리즘(C++)' 카테고리의 다른 글

그래프  (0) 2025.02.04
유니온 파인드 알고리즘  (0) 2025.02.03
배열 - 배열제어하기  (0) 2025.01.30
배열 - 배열정리하기  (0) 2025.01.30
큐- 요세푸스 문제  (0) 2025.01.28