문제풀이(Problem Solving)

백준, BOJ, 10814번 C++ [CPP]

게임이 더 좋아 2021. 6. 6. 02:36
반응형
728x170

//2022.04.07 다시 업데이트

 

음 나는 조금 어렵게 생각했나보다..

남들은 쉽게 풀더라.

 

 

https://www.acmicpc.net/problem/10814

 


 

우선 내 풀이는 이렇다.

# 맞은 풀이

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

struct Id{
    int order;
    int age;
    string name;
};

//const와 &을 받아옴

bool comp(const Id &p1, const Id &p2){
    if(p1.age< p2.age){
        return true;
    }
    else if(p1.age == p2.age){
        return p1.order < p2.order;
    }else{
        return false;
    }
}

int N;

vector<Id> v;
int main(){
    cin >> N;
    for(int i = 1; i<=N; i++){
        Id n;
        cin >> n.age >> n.name;
        n.order = i;
        v.push_back(n);
    }
    
    sort(v.begin(),v.end(), comp); // 나이순 정렬 -> 가입순 comp로 비교
    
    for(auto c : v){
        cout << c.age << " " << c.name << "\n";
    }
}

 

 

근데 여기서 안정 정렬, stable sort()라는 것을 알려줘서 해봤다.

 

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;


bool comp(pair<int, string> x, pair<int, string> y)
{
    return x.first < y.first;
}

int N;

vector<pair<int, string>> v;

int main(){
    cin >> N;
    for(int i = 1; i<=N; i++){
        int a;
        string b;
        cin >> a >> b;
        v.push_back({a,b});
    }
    
    stable_sort(v.begin(),v.end(),comp); // 나이순 정렬 (가입순 x)
    
    for(auto c : v){
        cout << c.first<< " " << c.second << "\n";
    }
}

 

음...

comp만드는 것까지는 똑같다.

그냥 comp에서 조건을 더 넣느냐 아니냐? 이 정도 차이다.

 

내가 만든 comp함수도 안정 정렬이라고 볼 수 있겠다.

입력받은 순서를 index로 받아서 index를 비교하니까..?

 

뭐 굳이 안정정렬이란 것을 알 필요는 없어보인다.

내가 만들면 되니까..?

 

//////////////////////////////////////////////////////////

 

다시 풀어보면서 느꼈다.

안정 정렬이란 것을 알 필요는 있다.

정렬함에도 순서가 입력 순서대로 유지된다는 것이 필요하긴 하다.

 

 

728x90
반응형
그리드형

'문제풀이(Problem Solving)' 카테고리의 다른 글

백준, BOJ, 15650번 C++ [CPP]  (0) 2021.06.06
백준, BOJ, 14501번 C++ [CPP]  (0) 2021.06.06
백준, BOJ, 2156번 C++ [CPP]  (1) 2021.06.05
백준, BOJ, 1912번 C++ [CPP]  (0) 2021.06.03
백준, BOJ, 2684번 C++ [CPP]  (0) 2021.05.31