https://www.acmicpc.net/problem/11651
11651번: 좌표 정렬하기 2
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
나는 별도의 좌표 클래스를 만들어서 Collections.sort 메소드를 통해 정렬을 했지만, 아마 정렬 카테고리에 있는 걸 보니 배열이나 정렬 등을 통해서 별도의 풀이가 있을 것 같다는 느낌이 들어서 한 번 찾아볼만할 것 같다.
하지만 일반적인 다른 문제에서도 이 방법은 굉장히 유용하기 때문에 풀어온 느낌대로 해결했다. 난이도 자체는 높지 않다.
문제 및 입출력
코드
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main
{
// 2차원 좌표데이터 클래스
static class point
{
int x;
int y;
point(int x, int y)
{
this.x = x;
this.y = y;
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
ArrayList<point> list = new ArrayList<point>();
int t = sc.nextInt();
for(int i=0; i<t; i++)
{
// 입력받는 좌표데이터를 리스트에 add
list.add(new point(sc.nextInt(), sc.nextInt()));
}
// 정렬 실행
Collections.sort(list, new Comparator<point>()
{
@Override
public int compare(point o1, point o2)
{
// y좌표가 같지 않을 때에는 y좌표를 기준으로 오름차순 정렬
if(o1.y!=o2.y)
{
return o1.y>o2.y?1:-1;
}
// y좌표가 같을 때에는 x좌표를 기준으로 오름차순 정렬
else
{
return o1.x>o2.x?1:-1;
}
}
});
for(point data : list)
{
System.out.println(data.x + " " + data.y);
}
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[백준] 1978 소수 찾기 (0) | 2021.09.18 |
---|---|
[백준] 10871 X보다 작은 수 (0) | 2021.09.17 |
[백준] 4344 평균은 넘겠지 (0) | 2021.09.14 |
[백준] 1110 더하기사이클 (0) | 2021.09.14 |
[백준] 2884 알람시계 (0) | 2021.09.14 |
댓글