Back/Algorithm

Python 백준 11651 좌표정렬하기2 / 파이썬 알고리즘

Python 백준 11651 좌표정렬하기2 / 파이썬 알고리즘

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

import sys

input = sys.stdin.readline

n = int(input())

array = []

for i in range(n):
    [x, y] = map(int, input().split())
    array.append([y, x])


s_array = sorted(array)

for m in s_array:
    print(m[1], m[0])

sys를 활용해 시간을 줄이도록 한다.

 

array = []

for i in range(n):
    [x, y] = map(int, input().split())
    array.append([y, x])

array로 빈 리스트를 만든다.

 

여기서 for문은 처음에 입력한 값인 숫자만큼 돌려서 숫자만큼 input할 수 있게 해준다.

 

input된 값은 [x, y]의 리스트 형식으로 array 리스트에 append한다.

 

여기서 주의할 점은 y의 순서대로 비교해야하니, [x, y] 그대로 넣는게 아니라 [y, x]의 순서로 넣어준다.

 

s_array = sorted(array)

for m in s_array:
    print(m[1], m[0])

 

s_array라고 array의 정렬된 값을 넣어준다.

 

s_array의 새 리스트 말고 array.sort() 를 해도 상관없다. 이럴 경우 밑의 포문도 array만큼 돌려주면 된다.

 

마지막 for문으로 s_array의 범위만큼 돌려주고,

 

print해준다.

 

m[1]은 인덱스가 리스트형식으로 저장되어있기 때문에,

 

m[1] -> 0번째 인덱스의 1번째 인덱스 라고 생각하면 된다.

 

즉 [ [0 , 4 ] , [ -1 , -1] ..... ] 이렇게 되어 있다고 가정하면,

 

m[1]은 [0, 4]를 끄집어 내와서 1번째 값인 4이다.

 

m[1], m[0]으로 출력하는 이유는 처음에 비교를 하기 위해 x, y의 값을 바꿨기 때문에, 다시 처음의 x, y값으로 때문이다.