[백준] 11650: 좌표 정렬하기 - 파이썬[python]

다인·2024년 9월 9일

백준

목록 보기
57/112
post-thumbnail

끙끙 대며 내 머리로 푼 문제! 여러 가지 시행착오를 정리해 보고자 글을 쓴당

시행착오

  • 처음에 나는 2차원 리스트를 만들려고 했다. 그런데 200001개의 인덱스를 만드니 당연히 메모리 초과(런타임 에러인가? 제출 안 해봐서 모르겠다)가 나기 때문에 다음 아이디어를 떠올렸다..
  • 그래서 그냥 빈 리스트에 입력받은 좌표들을 리스트로 추가하기로 했다.
  • x로 배열하는 건 쉽지만 그 다음 y로 배열하려면 어떻게 할까 하다가 sorted 함수는 key 매개변수를 사용해서 특정 열(인덱스)을 기준으로 정렬할 수 있다는 걸 알게 돼서 얘를 이용하기로 했다. 아래의 코드처럼 말이다.

1. 코드

N = int(input())
coordinate = []

for i in range(N):
    coordinate.append(list(map(int, input().split())))

coordinate = sorted(coordinate, key=lambda x: (x[0], x[1]))

for i in range(N):
    print(*coordinate[i], sep=' ')
  1. 입력받은 좌표들을 각각 리스트로 변환하고 이를 coordinate라는 리스트에 저장한다.
  2. key를 이용해서 첫 번째 열을 기준으로 먼저 정렬하고, 같은 값일 때는 두 번째 열을 기준으로 정렬하도록 했다.
  3. 그리고 정렬한 리스트를 for문을 활용해서 출력한다.

그런데....

이렇게 할 필요가 전혀 없다...
sorted 함수는 알아서 다차원 배열도 각 열을 다 정렬해준다...
이 문제에서는 순서대로 0번째 열을 정렬하고, 1번째 열을 정렬했기 때문에 sorted를 써도 충분한 것이다.

2. sorted를 옵션 없이 사용한 코드

N = int(input())
coordinate = []

for i in range(N):
    coordinate.append(list(map(int, input().split())))

coordinate.sort()

for i in range(N):
    print(coordinate[i][0], coordinate[i][1])
  • print하는 방식도 다르게 해보았다.

결과

  • 조금이지만 1번 코드가 더 빠르네? 근데 메모리는 더 잡아먹네?

0개의 댓글