프로그래밍 공부/알고리즘
[백준] 18870 좌표 압축
99mini
2021. 9. 23. 18:00
반응형
문제출처] https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
문제요약
좌표의 순위를 입력받은 순서대로 출력
풀이
소스코드는 Python 3으로 작성되었습니다.
import sys
input = sys.stdin.readline
n = int(input())
list_dots = []
# 인덱스를 저당하는 리스트를 만든다.
for i in range(n):
list_dots.append([i,0])
# 좌표를 입력받고 리스트에 저장한다.
list_values = list(map(int, input().split()))
# 입력 받은 좌표를 인덱스를 저장해 둔 리스트에 저장한다.
for i in range(n):
list_dots[i][1] = list_values[i]
# 좌표를 기준으로 오름차순 정렬한다.
list_dots.sort(key=lambda x : x[1])
# 좌표를 기준으로 오름파순 정렬된 리스트에 압축된 좌표를 저장한다.
score = 0
list_dots[0].append(score)
for i in range(1, n):
# 만약 좌표값이 같다면 압축된 좌표도 같으므로 score의 값은 증가하지 않는다.
if list_dots[i][1] != list_dots[i-1][1]:
score += 1
list_dots[i].append(score)
# 입력받은 순으로 다시 정렬해준다.
list_dots.sort(key=lambda x : x[0])
# 압축된 좌표만 띄어쓰기를 포함하여 출력한다.
for dot in list_dots:
print(dot[2], end = ' ')
반응형