[백준 BOJ] 11650번 좌표 정렬하기 (C++/cpp)

2022. 10. 13. 12:11PS (Program Solving)/BOJ (백준)

문제 설명

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

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

백준 BOJ 11650번 좌표 정렬하기 문제 사진

 

접근 방법 - 구조체를 응용한 정렬 심화 문제

백준의 11650번 문제는 구조체와 정렬을 함께 이용하여 해결해야 하는 문제이다.

해당 문제는, 입력받은 좌표들을 x와 y의 크기 순으로 오름차순 정렬하여 출력해야 하는 문제이다.

여기서 x 좌표의 값을 우선시하여 정렬하고, x 좌표의 값이 동일할 시엔 y 좌표의 값으로 정렬을 수행하여야 한다.

해당 유형과 비슷한 문제에 대하여 이전에 작성한 풀이 글이 있는데, 이에 대한 링크를 아래에 기재해놓았다.

이런 유형의 문제가 어색하다면 아래 링크의 문제 풀이도 함께 참고해보길 바란다.

https://smary-it.tistory.com/200

 

[백준 BOJ] 5635번 생일 (C++/cpp)

문제 설명 https://www.acmicpc.net/problem/5635 5635번: 생일 어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오. www.acmicpc.net 접근..

smary-it.tistory.com

위와 마찬가지로, 필자는 x와 y의 값을 멤버로 갖는 구조체를 만들고 이를 이용하여 정렬을 수행하도록 하였다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) location 구조체를 만들어 x 좌표의 값과 y 좌표의 값을 멤버로 둔다.

 

2) location 타입의 배열(xy)을 전역 변수로 선언해둔다.

 

3) 좌표의 개수(n)와 좌표의 정보(xy)를 순차적으로 입력받는다.

 

4) sort() 함수를 이용하여 xy의 좌표에 대해 오름차순 정렬을 한다.

여기서, 아래 compare 함수를 선언하고 이를 사용하여 구조체 정렬을 수행하게끔 한다.

x의 값을 먼저 비교하고, x의 값이 동일할 시 y의 값을 비교하게끔 하여 정렬을 수행하게끔 하였다.

(bool형으로 반환하여 각 경우에 대해 위치 변경이 필요한지 아닌지를 결정하게끔 compare 함수를 설정하였다.)

 

5) 오름차순으로 정렬을 완료한 결과를 순차적으로 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <algorithm>
#define endl '\n'
using namespace std;

//백준 11650번 코드
struct location {
	int x;
	int y;
};
location xy[100001];

bool compare(location a, location b) {
	if (a.x == b.x) {
		return a.y < b.y;
	}
	return a.x < b.x;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> xy[i].x >> xy[i].y;
	}
	sort(xy, xy + n, compare);

	for (int i = 0; i < n; i++) {
		cout << xy[i].x << " " << xy[i].y << endl;
	}
}

 

제출 결과

백준 BOJ 11650번 좌표 정렬하기 문제 C++ 제출 결과

(2022.06.18 백준 11650번 문제 제출 결과)

반응형