📍 백준 11650번 - 좌표 정렬하기문제 C++
🧩 문제 요약
좌표 x,y가 주어질때 x의 오름차순으로 정렬하라.
단, x가 같은 경우 y의 오름차순으로 정렬.
🧾내가 작성한 초기 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(const vector<int> a, const vector<int> b){
if(a[0] == b[0]) return a[1] < b[1];
return a[0] < b[0];
}
int main(){
int n, i, x, y;
vector<vector<int>> arr;
cin >> n ;
for(i=0; i<n ; i++){
cin >> x >> y;
arr.push_back({x,y});
}
sort(arr.begin(), arr.end(), compare);
for(i=0; i<n; i++){
cout << arr[i][0] << " " << arr[i][1] << "\n";
}
}
이 문제를 직관적으로 풀자면 vector + comapre함수로 간단하게 풀 수 있다.
하지만 아래와 같이 vector가 아닌 structure로 해결한 풀이가 있어 살펴보려고 한다.
👍이 문제에서 배운점
✅ struct(구조체)
구조체(struct) : 하나 이상의 변수를 그룹 지어서 새로운 자료형을 정의.
구조체는 사용자 정의 자료형으로 객체를 표현하기 위해 하나 이상의 변수가 필요한 경우 많이 사용한다.
struct를 사용하기 전에는 꼭 컴파일러에게 구조체를 선언하고 정의를 해줘야 한다. struct를 사용하는 방법은 다음과 같다.
✔ 구조체 선언 및 정의 (Declaring and defining structs)
먼저 컴파일러에게 우리가 만들고 싶은 구조체를 알려준다.
// 컴파일러에 구조체 정의하기
struct Crew
{
short id;
int age;
string name;
};
id, age, name 과 같이 구조체에 속한 변수를 멤버(member) 또는 필드(field)라고 한다.
일반적으로 구조체 이름은 대문자로 시작해서 변수 이름과 구분한다.
✔ 구조체 타입의 변수 선언
우리가 위에서 정의한 Crew타입의 변수를 선언하면 된다.
// 구조체 선언
Crew person;
✔ 구조체 멤버 접근
구조체의 멤버에 접근하는 방법은 간단하다. '.'을 사용하면 된다.
person.id = 1;
person.age = 20;
person.name = "Hello";
출력할 때나 값은 불러올때도 마찬가지다.
cout << person.id ; // 출력값 1
cout << person.age ; // 출력값 20
cout << person.name ; // 출력값 Hello
🧾 완성된 코드
// array를 만들기 위한 구조체 생성
struct coordinate{
int x, y;
};
// 구조체 선언
struct coordinate arr[100001];
bool compare(coordinate a, coordinate y){
if(a.x==b.x) return a.y< b.y;
return a.x < b.x;
}
int main(){
for(int i = 0; i<n; i++){
cin >> arr[i].x >> arr[i].y;
}
// 정렬
sort(arr, arr+n, compare);
// 출력
for(int i = 0; i<n ; i++){
cout <, arr[i].x << " " << arr[i].y << "\n";
}
}
아주 간단하게 구조체에 대해서 알아보았다.
구조체는 실제로 c++에서 굉장히 많이 사용되는 것 같다.
백준의 상위 코드만 보더라고 struck을 사용해서 구현하는 코드들이 정말 많았다.
pair를 사용하는 것 만으로는 한계가 있다고 느껴졌는데 struck를 사용하면 객체 관리가 더 편해질것 같다.
유용한 개념이니 기억하고 있자!!
'하루 알고리즘 1문제 풀기' 카테고리의 다른 글
백준 10816번 - 숫자 카드2 문제 C++ [이진 탐색], upper_bound()/lower_bound() (0) | 2025.04.04 |
---|---|
백준 1018번[brute force] - 체스판 다시 칠하기문제 C++ 초기값 설정 (0) | 2025.04.03 |
백준 10814번 - 나이순 정렬 문제 C++ sort()/stable_sort() (0) | 2025.04.02 |
백준 1436번-팩토리얼 0의 개수 문제 C++ (0) | 2025.04.01 |
백준 1436번 - 영화감독 숌 문제 C++ (0) | 2025.04.01 |