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

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

by arctis7p 2024. 12. 9.

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

 

좌표가 주어지면 x좌표를 기준으로 오름차순 정렬하고, 만약 x좌표가 같을 시 y좌표를 기준으로 오름차순 정렬하고 출력하는 문제입니다.

 

우선 이 문제를 풀기 전에 Python 3.5부터 도입된 타입 힌팅이라는 기능을 사용해 보았습니다.

 

타입 힌팅에 관한 설명 글은 추후 작성하도록 하겠습니다.

 

코드를 확인해 보겠습니다.

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[X_INDEX], x[Y_INDEX]))

for x, y in data:
    print(x, y)

 

각 부분을 자세히 살펴보겠습니다.

  1. 모듈 임포트 및 입력 설정
    import sys
    from typing import List, Tuple
    
    input = sys.stdin.readline
    • typing 모듈에서 List와 Tuple을 임포트하여 타입 힌팅에 사용합니다.
    • input() 함수를 sys.stdin. readline으로 재정의하여 입력 속도를 개선합니다.
  2. 입력 처리
    N: int = int(input())
    data: List[Tuple[int, int]] = [tuple(map(int, input().split())) for _ in range(N)]
    • N은 입력받을 좌표의 개수입니다. 타입 힌팅을 사용하여 int 임을 명시합니다.
    • data는 좌표들을 저장할 리스트 입니다. 각 좌표는 (x, y) 형태의 튜플로 저장되며 타입 힌팅을 사용해 List[Tuple[int, int]]임을 명시합니다.
    • 리스트 컴프리헨션을 사용하여 N개의 좌표를 입력받아 처리합니다.
  3. 상수 정의
    X_INDEX, Y_INDEX = 0, 1
    • 튜플 언패킹을 사용하여 X_INDEX와 Y_INDEX를 정의합니다.
    • 이 상수들은 좌표 튜플의 인덱스를 나타냅니다.
  4. 정렬
    data.sort(key=lambda x: (x[X_INDEX], x[Y_INDEX]))
  5. 결과 출력
    for x, y in data:
        print(x, y)
    • 정렬된 data 리스트를 순회합니다.
    • 각 좌표 튜플을 x와 y로 언패킹합니다.
    • print() 함수를 사용하여 각 좌표를 출력합니다.

 

 

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