파이썬 백준 18870번 문제 풀이
1. 문제 분석
- 중복값 없이 좌표를 정렬한다.
Set에 넣은 다음 Sorted 함수를 통해 정렬된 리스트를 받는다
정렬 된 모습
sorted X -10 -9 4 2 X’ 0 1 2 3 - sorted X와 X’를 연결 해야한다.
sorted X를 Key, X’를 Value로 넣은 딕셔너리를 만든다
2. 코드
import copy
import sys
compressed_X = dict() # 압축 좌표를 저장할 딕셔너리
N = int(input())
X = list(map(int, sys.stdin.readline().split()))
copy_X = copy.deepcopy(X) # 본래 좌표 순서가 저장된 배열
X = sorted(set(X)) # 좌표를 집합에 넣어 중복값을 없애고, 정렬한다
for i in range(len(X)):
compressed_X[X[i]] = i # 본래 좌표(key) 압축 좌표(value)로 딕셔너리에 저장한다
for i in copy_X:
print(compressed_X[i], end=' ')
X = sorted(set(X)) # 좌표를 집합에 넣어 중복값을 없애고, 정렬한다
중복값을 없앤 정렬된 X좌표를 구한다
# 중복값을 없앤 좌표(key), 압축 좌표(value)를 한 쌍으로 딕셔너리에 저장한다
for i in range(len(X)):
compressed_X[X[i]] = i
sorted X를 Key, X’를 Value로 넣은 딕셔너리를 만든다
3. 총평
문제의 해결 방법은 매우 빨리 찾았지만
코드가 너무 길어지는 것 같아서
짧게 코딩을 하려다 시간이 좀 걸린 것 같다.
파이썬은 깊은 복사를 하는게 매우 쉬운 것 같다.
조만간 자바로 다시 돌아가야하는데
잘 적응 할 수 있을지 걱정이다,,, ㅠㅜ
댓글남기기