컴공댕이 공부일지

[ C++/cpp ] 백준 (11650 좌표 정렬하기) ⭐정렬, 비교함수 본문

문제 풀이/코딩 문제 풀이 모음

[ C++/cpp ] 백준 (11650 좌표 정렬하기) ⭐정렬, 비교함수

은솜솜솜 2024. 2. 29. 23:33
728x90

백준 11650번 좌표 정렬하기

(실버 5)

 

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

 

 

(정답 코드)

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

using namespace std;
typedef pair<int,int> p;

// & : 레퍼런스
// const : 상수

// 비교함수 정의
bool cmp (const p &a, const p &b) {
    
    if(a.first!=b.first) {
        return a.first < b.first;
    }
    
    return a.second < b.second;
    
}

void sortXY(vector<p>& xy) { // 참조를 이용한 전달. 벡터 직접 수정 가능
    
    sort(xy.begin(), xy.end(), cmp);
    
}

int main()
{
    
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    
    // 입력
    int n;
    cin >> n;
    
    vector <p> xy;
    int x;
    int y;
    
    while(n--) {
        cin >> x >> y;
        xy.push_back(make_pair(x,y)); //pair 생성 후 vector에 추가
    }
    
    
    // 연산
    sortXY(xy);
    
    
    // 출력
    for (int i=0; i<xy.size(); i++) {
        cout << xy[i].first << " " << xy[i].second << '\n';
    }
    

    return 0;
}

 

 

📖 비교함수

정렬 알고리즘에서 사용되는 함수로, 두 요소를 비교하여 그들의 순서를 결정하는 데 사용

 

비교 함수의 부등호 방향은 정렬의 방향을 결정합니다.

만약 비교 함수에서 첫 번째 요소가 두 번째 요소보다 작으면 음수를 반환하고, 첫 번째 요소가 두 번째 요소보다 크면 양수를 반환하도록 구현하면, 이는 오름차순 정렬을 의미합니다. 즉, 작은 값이 앞에 오게 됩니다.

 

그러나 반대로 첫 번째 요소가 두 번째 요소보다 크면 음수를 반환하고, 첫 번째 요소가 두 번째 요소보다 작으면 양수를 반환하도록 구현하면, 이는 내림차순 정렬을 의미합니다. 이 경우에는 큰 값이 앞에 오게 됩니다.

 

따라서 비교 함수의 부등호 방향을 결정할 때는 원하는 정렬 방식에 따라서 부등호의 방향을 선택해야 합니다. 일반적으로는 오름차순을 사용하므로 작은 값이 앞에 오도록 구현됩니다.

 

-챗지피티 참고..

 

 

📖 매개변수 키워드 . 레퍼런스와 상수

 

매개변수란 함수에 투입되는 변수

 

  1. & (레퍼런스):
    • &는 레퍼런스를 나타내며, C++에서 함수에 인자를 전달할 때 사용됩니다.
    • 레퍼런스를 사용하면 해당 매개변수가 원본 객체를 가리키는 포인터처럼 동작하며, 함수 내에서 해당 객체를 직접 조작할 수 있습니다. 이는 매개변수를 복사하는 것보다 메모리와 성능 면에서 효율적입니다.
  2. const:
    • const는 상수(constant)를 나타내며, 해당 변수가 변경되지 않음을 나타냅니다.
    • 함수 매개변수 앞에 const를 붙이면 해당 매개변수가 함수 내에서 수정되지 않음을 보장합니다. 이는 매개변수가 함수 내에서 읽기 전용으로 사용됨을 의미합니다.
    • const를 사용하면 프로그램의 안정성과 가독성을 높일 수 있습니다.

 

728x90
Comments