백준

백준 11650 문제풀이 [python]

ys.k 2023. 7. 3. 20:56

포스팅에 앞서 내용이 틀릴 수 있습니다.
해당 부분 지적 감사히 받습니다.

문제를 보자.

좌표를 정렬하여 순서대로 출력시켜 주면 된다.

 

코드부터 보자.

 

코드

import sys as s
a = int(s.stdin.readline())
array =[[0,0] for _ in range(a)]

for i in range(a):
    array[i] = list(map(int,s.stdin.readline().split()))
array.sort()

for j in range(len(array)):
    for i in range(2):
        print(array[j][i],end =' ')
    print()

일단 이렇게 해도 정답판정이다.

 

하지만 좀 찝찝한 느낌이 든다.

 

sort부분에서 분명히 무언가 놓친 느낌이다.

 

이번 포스팅에서는 sort의 정렬기준에 대해서 알아보겠다.

 

sort와 sorted는 key 값을 통해서 정렬기준을 설정해 줄 수 있다.

 

예시를 보자.

array = [[1, -1], [1, 1], [2, 2], [3, 3], [3, 4]]

 

array.sort(key = lambda x : x [0]) 일 경우, x [0] 번째를 기준으로 정렬된다.

 

마찬가지로 array.sort(key = lambda x: x [1]) 이면, x [1]의 크기를 기준으로 정렬을 한다.

 

만약 x [0]을 먼저 정렬 후, x [1]을 정렬하고 싶다면

 

array.sort(key = lambda x : (x [0] , x [1]) 이렇게 사용하면 된다.

 

내림차순으로 정렬하고 싶으면 기준 앞에 -를 붙이면 된다. (ex) key = lambda x : (x [0] , -x [1])

 

수정 코드

import sys as s
a = int(s.stdin.readline())
array =[[0,0] for _ in range(a)]

for i in range(a):
    array[i] = list(map(int,s.stdin.readline().split()))
   
array.sort(key = lambda x:(x[0],x[1]))

for j in range(len(array)):
    for i in range(2):
        print(array[j][i],end =' ')
    print()

둘 다 정답이나, 후자가 논리상 깔끔하다.

 

그리고 chat gpt에 물어봤더니 그냥 인자가 없는 sort()는 첫 번째 요소의 기준으로만 정렬된다더라.

 

확실한 정보가 아니니, 일단 참고만 하자.

 

배운 점

1. .sort() 기존 배열을 정렬, sorted()  기존 배열을 정렬하여 새로운 배열에 넣음( 기존 유지 )