Baekjoon Case

[백준 #11651] 좌표 정렬하기 2 - 파이썬(python)

Scarlett_C 2021. 8. 12. 12:15
728x90

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

 

앞 쪽 문제에서 x,y 값만 바꾸면 되는 것 아닌가..

뭔가 다른 방법으로 코드를 짜야 하나,,?

 

import sys
N=int(input())
poslist=[]
for i in range(N):
    a,b=map(int,sys.stdin.readline().split())
    poslist.append((b,a))

poslist.sort()

for i in range(N):
    for j in range(1,-1,-1):
        print(poslist[i][j],end=' ')
    print ()

이렇게 해서 일단 맞긴 했는데 사실 맞기만 하면 되는 것은 아니니,,

조금 더 간결하게 쓸 수 있는 방법을 찾았다..

from sys import stdin
input=stdin.readline
poslist=[input() for _ in range(int(input()))]
poslist.sort(key=lambda a: (int(a.split()[1]),int(a.split()[0])))
print("".join(poslist))

 

숏코딩 보면 한줄로 다 끝내던데,, 그건 아직까지 이해하기가 너무 어려워서 포기..

지금 이해 할 수 있는건 여기까지 인 것 같다.

 

여기부터는 개인적으로 이해 한 것을 정리해봄

더보기
poslist=[input() for _ in range(int(input()))]

 

 계속 값을 쌍으로 받아서 입력하려고 했었는데(2차원 배열),

이 것을 보니까 굳이 그럴 필요가 없었던 것 같다.

저렇게 받으니까 마지막 엔터값(/n)도 알아서 들어가고 편리한 것 같다.

poslist.sort(key=lambda a: (int(a.split()[1]),int(a.split()[0])))

 이걸 이해하는데 시간이 좀 걸린 것 같다.

값을 쌍으로 받은게 아니라 한 값으로 받은것을 공백을 기준으로 나누고

1번째 값을 먼저 정렬하고 그다음에 0번째 값을 정렬..

 

앞으로 뭔가 유용하게 쓰일 것 같다. 

 

마지막에 프린트 할 때 ""로 붙어있어서 값 사이를 붙이는 건 줄 알았는데,

생각 해 보니 split으로 된 게 아니라서..

붙여서 써야 /n이 중복으로 입력되지 않기때문에 해 놓은것 같다.

 

간단한 문제에서 많은 것을 배움..

728x90