[백준] 좌표 정렬하기 2

SUN·2023년 6월 22일
0

백준

목록 보기
2/15
post-thumbnail

좌표 정렬하기 2

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

문제 풀이

import sys

N = int(sys.stdin.readline())
loc =[0] * N 

for i in range(0,N):
    x,y = map(int, sys.stdin.readline().split())
    loc[i] = [x,y]

loc.sort(key=lambda x: (x[1], x[0]))
# 1번 인덱스에 대해서 먼저 정렬을 진행한 뒤,
# 0번 인덱스를 정렬한다. 
# -> 0 4가 맨 뒤에 나오기에 1번째 인덱스에서부터 정렬을 진행

for j in range(len(loc)):
    print(loc[j][0], loc[j][1])

2차원 배열에서의 정렬
- 첫번째 값 이용
    lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
    lst.sort(key=lambda x:x[0])
    print(lst)

    # [[1, 2], [1, 3], [2, 1], [3, 4], [3, 2]]
    -> lambda를 사용하여 x:x[0] 으로 0번째 인덱스에 대해서 정렬
        0번째 인덱스에 대해서 오름차순으로 정렬을 진행,
        1번째 인덱스에 대해서는 정렬이 되지 않는다.

- 두번째 값 이용
    lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
    lst.sort(key=lambda x: (x[0], -x[1]))
    print(lst)

    # [[1, 3], [1, 2], [2, 1], [3, 4], [3, 2]]
    -> x: () 처럼 괄호안에 튜플 형식으로 집어넣는다.
        이때 -를 하면 역으로 정렬시킬 수 있다고한다.
        위 예제의 경우, 먼저 0번 인덱스에 대해서 오름차순으로 정렬하고
        동일한 값의 경우 내림차순으로 재정렬한다고한다.
    ---------------------------------------------------------------

    lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
    lst.sort(key=lambda x: (x[1], x[0]))
    print(lst)

    # [[2, 1], [1, 2], [3, 2], [1, 3], [3, 4]]  
    -> 순서바꾸어 정렬도 가능.
        위 예제는 1번 인덱스에 대해서 먼저 오름차순으로 정렬을 진행하고   
        같은 1번인덱스의 경우 0번째 인덱스에 대해서 오름차순으로 정렬을 진행한다.
    ---------------------------------------------------------------

    2차원 배열에서 sort의 기본은 
    0번째 인덱스를 오름차순으로 정렬하고, 1번째 인덱스를 오름차순으로 정렬한다.
    특정 인덱스에 대해 정렬하려면 key를 사용해야한다.

참고한 사이트 : https://haesoo9410.tistory.com/193

0개의 댓글