문제 링크: 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)
각 부분을 자세히 살펴보겠습니다.
- 모듈 임포트 및 입력 설정
import sys from typing import List, Tuple input = sys.stdin.readline
- typing 모듈에서 List와 Tuple을 임포트하여 타입 힌팅에 사용합니다.
- input() 함수를 sys.stdin. readline으로 재정의하여 입력 속도를 개선합니다.
- 입력 처리
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개의 좌표를 입력받아 처리합니다.
- 상수 정의
X_INDEX, Y_INDEX = 0, 1
- 튜플 언패킹을 사용하여 X_INDEX와 Y_INDEX를 정의합니다.
- 이 상수들은 좌표 튜플의 인덱스를 나타냅니다.
- 정렬
data.sort(key=lambda x: (x[X_INDEX], x[Y_INDEX]))
- sort() 메서드를 사용하여 data 리스트를 정렬합니다.
- key 매개변수에 람다 함수를 사용하여 정렬기준을 지정합니다.
- 먼저 x좌표(x[X_INDEX])를 기준으로 정렬됩니다.
- x좌표가 같을 경우 y좌표(x[Y_INDEX])를 기준으로 정렬합니다.
- lambda 함수에 대해 모를 경우: 2024.12.09 - [코딩 테스트] - 코드를 간단하게 만드는 법: 파이썬 람다(lambda) 함수
- 결과 출력
for x, y in data: print(x, y)
- 정렬된 data 리스트를 순회합니다.
- 각 좌표 튜플을 x와 y로 언패킹합니다.
- print() 함수를 사용하여 각 좌표를 출력합니다.
# 이 글의 내용 중 일부는 Perplexity AI의 도움을 받아 정보를 수집하고 정리하였으며, 추가적인 연구와 개인적인 견해를 더하였습니다.
'백준 문제풀이' 카테고리의 다른 글
[백준] 11651번 좌표 정렬하기2 - Python (0) | 2024.12.10 |
---|---|
[백준] 1931번 회의실 배정 - Python (0) | 2024.12.10 |
[백준] 1920번 수 찾기 - Python(2편) (0) | 2024.12.09 |
[백준] 1920번 수 찾기 - Python(1편) (0) | 2024.12.09 |
[백준] 1427번 소트인사이드 - Python(2편) (0) | 2024.12.09 |