본문 바로가기
백준 - 파이썬/단계별 - 13 (정렬)

*[백준/파이썬] 18870번 좌표 압축 | enumerate함수

by miiinn 2025. 10. 31.

*딕셔너리 이용, 정렬 후 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))