minimimi

[백준] 18870 좌표 압축 본문

프로그래밍 공부/알고리즘

[백준] 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 = ' ')
반응형

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

[백준] 2609 최대공약수와 최소공배수  (0) 2021.09.26
[백준] 1037 약수  (0) 2021.09.25
[백준] 15649 N과 M (1)  (0) 2021.09.21
[백준] 2108 통계학  (0) 2021.09.20
[백준] 10989 수 정렬하기 3  (0) 2021.09.19