문제 링크: 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)
- 라이브러리 및 타입 임포트
import sys from typing import List, Tuple
- sys 모듈을 임포트 하여 시스템 관련 기능을 사용합니다. 나중에 print() 함수를 재정의 할 때 사용할 겁니다.
- typing 모듈에서 List와 Tuple을 임포트하여 타입 헌팅에 사용합니다.
- 입력 최적화
input = sys.stdin.readline
- sys.stdin.readline을 input() 함수로 재할당하여 입력 속도를 개선합니다.
- 자세한 설명은 링크를 확인해 주시면 감사하겠습니다. 2024.12.08 - [코딩 테스트] - sys.stdin.readline()으로 입력 속도 높이기: 개행문자 처리부터 주의사항까지
- 데이터 입력 및 저장
N: int = int(input()) data: List[Tuple[int, int]] = [tuple(map(int, input().split())) for _ in range(N)]
- N은 입력받을 좌표의 개수입니다.
- data는 입력받은 좌표들을 저장하는 리스트입니다. 각 좌표는 (x, y) 형태의 튜플로 저장되며, 타입 힌팅을 통해 표현하였습니다.
- 리스트 컴프리헨션을 사용하여 N개의 좌표를 한 번에 입력받아 처리합니다.
- 상수 정의
X_INDEX, Y_INDEX = 0, 1
- 튜플 내에서 x좌표와 y좌표의 인덱스를 상수로 정의합니다.
- 정렬
data.sort(key = lambda x: (x[Y_INDEX], x[X_INDEX]))
- sort 메서드를 사용하여 data 리스트를 정렬합니다.
- key 파라미터에 람다 함수를 사용하여 정렬 기준을 지정합니다.
- 먼저 y좌표(x[Y_INDEX])를 기준으로 정렬하고, y좌표가 같을 경우 x좌표(x[X_INDEX])를 기준으로 정렬합니다.
- 결과 출력
for x, y in data: print(x, y)
- 정렬된 data 리스트를 순회하면서 각 좌표를 출력합니다.
- 언패킹을 사용하여 각 튜플의 x, y 값을 직접 변수에 할당합니다.
이 코드의 특징을 확인해 보겠습니다.
- 효율성: sys.stdin.readline을 사용하여 입력 속도를 개선했습니다.
- 타입 안정성: 타입 힌팅을 사용하여 코드의 가독성과 유지보수성을 높였습니다.
- 메모리 효율성: 튜플을 사용하여 좌표를 저장함으로써 메모리 사용을 최적화했습니다.
- 정렬 알고리즘: Python의 내장 sort 함수를 사용하여 효율적으로 정렬했습니다.
- 가독성: 상수를 사용하여 코드의 의미를 명확히 했습니다.
# 이 글의 내용 중 일부는 Perplexity AI의 도움을 받아 정보를 수집하고 정리하였으며, 추가적인 연구와 개인적인 견해를 더하였습니다.
'백준 문제풀이' 카테고리의 다른 글
[백준] 1764번 듣보잡 - Python (0) | 2024.12.10 |
---|---|
[백준] 10816번 숫자 카드 2 - Python (3) | 2024.12.10 |
[백준] 1931번 회의실 배정 - Python (0) | 2024.12.10 |
[백준] 11650번 좌표 정렬하기 - Python (1) | 2024.12.09 |
[백준] 1920번 수 찾기 - Python(2편) (0) | 2024.12.09 |