*딕셔너리 이용, 정렬 후 0부터 순서를 이용하는 거 까지는 접근했으나 인덱스 접근과 enumerate 함수 사용을 생각 못 함.
✅ 좌표 압축 문제의 올바른 해결 로직
좌표 압축은 **"자기보다 작은 고유한 좌표의 개수"**를 구하는 것입니다. 이는 정렬된 고유값 리스트에서 각 값이 몇 번째 인덱스에 있는지를 찾는 것과 같습니다.
💡 enumerate의 역할
enumerate() 함수는 리스트를 순회할 때 인덱스와 요소를 동시에 반환합니다.
| i (인덱스) | val (요소) | 의미 |
| 0 | 5 | 5는 가장 작은 값(0번째) |
| 1 | 10 | 10은 두 번째로 작은 값(1번째) |
| 2 | 20 | 20은 세 번째로 작은 값(2번째) |
for i, val in enumerate(sorted_coor):
dic_coor[val] = i
[최종 코드]
import sys
input = sys.stdin.readline
n = int(input())
coor = list(map(int, input().split()))
# 1. 중복 제거, 정렬
sorted_coor = sorted(list(set(coor)))
# 2. 딕셔너리에 {좌표값: 순위} 형태로 저장
dic_coor = {}
for i, val in enumerate(sorted_coor):
dic_coor[val] = i
# 3. 원본 coor 리스트를 순회하며 압축된 좌표(순위)를 출력
result = []
for val in coor:
result.append(str(dic_coor[val]))
# 4. 공백을 구분자로 하여 한 번에 출력 (빠른 출력 방식)
print(' '.join(result))'백준 - 파이썬 > 단계별 - 13 (정렬)' 카테고리의 다른 글
| *[백준/파이썬] 1181번 단어 정렬 | lambda함수 정렬키 (0) | 2025.10.22 |
|---|---|
| *[백준/파이썬] 11651번 좌표 정렬하기 2 | lambda함수 이용 정렬 (0) | 2025.10.22 |
| *[백준/파이썬] 11650번 좌표 정렬하기 (0) | 2025.10.22 |
| [백준/파이썬] 1427번 소트인사이드 (0) | 2025.10.22 |
| *[백준/파이썬] 10989번 수 정렬하기 3 | 계수 정렬 (Counting Sort) | 메모리초과 주의 (1) | 2025.10.22 |