본문 바로가기
백준 문제풀이

[백준] 11651번 좌표 정렬하기2 - Python

by arctis7p 2024. 12. 10.

문제 링크: https://www.acmicpc.net/problem/11651

 

이 문제는 2차원 평면 위의 점이 N개 주어졌을 때, 좌표를 Y좌표가 증가하는 순으로, 만약 Y좌표가 같으면 X좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 만들면 됩니다.

 

전에 풀었던 문제랑 거의 같습니다.

2024.12.09 - [분류 전체보기] - [백준] 11650번 좌표 정렬하기 - Python

 

[백준] 11650번 좌표 정렬하기 - Python

문제 링크: https://www.acmicpc.net/problem/11650 좌표가 주어지면 x좌표를 기준으로 오름차순 정렬하고, 만약 x좌표가 같을 시 y좌표를 기준으로 오름차순 정렬하고 출력하는 문제입니다. 우선 이 문제

arctis7p.tistory.com

 

 

일단 코드를 보면서 분석해보겠습니다.

import sys
from typing import List, Tuple
input = sys.stdin.readline

N: int = int(input())
data: List[Tuple[int, int]] = [tuple(map(int, input().split())) for _ in range(N)]
X_INDEX, Y_INDEX = 0, 1
data.sort(key = lambda x: (x[Y_INDEX], x[X_INDEX]))

for x, y in data:
    print(x, y)
  1. 라이브러리 및 타입 임포트
    import sys
    from typing import List, Tuple
    • sys 모듈을 임포트 하여 시스템 관련 기능을 사용합니다. 나중에 print() 함수를 재정의 할 때 사용할 겁니다.
    • typing 모듈에서 List와 Tuple을 임포트하여 타입 헌팅에 사용합니다.
  2. 입력 최적화
    input = sys.stdin.readline
  3. 데이터 입력 및 저장
    N: int = int(input())
    data: List[Tuple[int, int]] = [tuple(map(int, input().split())) for _ in range(N)]
    • N은 입력받을 좌표의 개수입니다.
    • data는 입력받은 좌표들을 저장하는 리스트입니다. 각 좌표는 (x, y) 형태의 튜플로 저장되며, 타입 힌팅을 통해 표현하였습니다.
    • 리스트 컴프리헨션을 사용하여 N개의 좌표를 한 번에 입력받아 처리합니다.
  4. 상수 정의
    X_INDEX, Y_INDEX = 0, 1
    • 튜플 내에서 x좌표와 y좌표의 인덱스를 상수로 정의합니다.
  5. 정렬
    data.sort(key = lambda x: (x[Y_INDEX], x[X_INDEX]))
    • sort 메서드를 사용하여 data 리스트를 정렬합니다.
    • key 파라미터에 람다 함수를 사용하여 정렬 기준을 지정합니다.
    • 먼저 y좌표(x[Y_INDEX])를 기준으로 정렬하고, y좌표가 같을 경우 x좌표(x[X_INDEX])를 기준으로 정렬합니다.
  6. 결과 출력
    for x, y in data:
        print(x, y)
    • 정렬된 data 리스트를 순회하면서 각 좌표를 출력합니다.
    • 언패킹을 사용하여 각 튜플의 x, y 값을 직접 변수에 할당합니다.

 


 

이 코드의 특징을 확인해 보겠습니다.

  1. 효율성:  sys.stdin.readline을 사용하여 입력 속도를 개선했습니다.
  2. 타입 안정성: 타입 힌팅을 사용하여 코드의 가독성과 유지보수성을 높였습니다.
  3. 메모리 효율성:  튜플을 사용하여 좌표를 저장함으로써 메모리 사용을 최적화했습니다.
  4. 정렬 알고리즘: Python의 내장 sort 함수를 사용하여 효율적으로 정렬했습니다.
  5. 가독성: 상수를 사용하여 코드의 의미를 명확히 했습니다.

 

 

# 이 글의 내용 중 일부는 Perplexity AI의 도움을 받아 정보를 수집하고 정리하였으며, 추가적인 연구와 개인적인 견해를 더하였습니다.