알고리즘/Python

[백준] 18870 - 좌표압축

9__bin 2023. 6. 28. 19:11

https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에

www.acmicpc.net

문제 한줄 이해

-주어진 N개의 좌표들을 대소관계를 유지하면서 좌표 압축하기.

 

생각난 풀이

1번째 방법: 처음에는 단순히 값들의 대소관계를 유지하면서 각 좌표의 값들을 +1,-1 등을 하면서 좌표 사이의 갭을 줄여나가면 된다고 생각했다. 하지만 좌표값의 범위가 컸고 갭차이가 크면 시간복잡도가 커질것이라 생각했고 어떤 좌표를 기준으로 갭을 줄여나가야 하는지 기준을 잡기가 어려웠다. 

고민을 하다가 출력 예제를 보고 오름차순 기준으로 인덱스 번호가 부여 되는것을 캐치하고 코드를 짰다.

 

import sys

n = int(sys.stdin.readline())
nlist = list(map(int, sys.stdin.readline().split()))
sublist = sorted(nlist)

#배열을 정렬하고 dic에 각 값들의 인덱스 위치를 저장 하기 위해
dic ={}
cnt = 0
for i in range(n):
#   dic에 없다면 순서를 부여하고 +1 
    if sublist[i] not in dic:
        dic[sublist[i]] = cnt
        cnt +=1

#원래의 배열을 보고 dic의 값 출력
for i in nlist:
    print(dic[i],end=' ')

'알고리즘 > Python' 카테고리의 다른 글

[백준] 1074 - Z  (0) 2023.07.02
[백준] 21736 - 헌내기는 친구가 필요해  (0) 2023.06.29
[백준] 11724-연결 요소의 개수  (0) 2023.06.28
[백준] 2805-나무 자르기  (0) 2023.06.27
[백준] 2630-색종이 만들기  (0) 2023.06.27