본문 바로가기
백준

[백준] 18870번 : 좌표 압축 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 11. 16.
728x90
반응형

 

 

18870번: 좌표 압축

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 각 좌표를 압축했을 때의 값을 딕셔너리에 저장하고 원래 좌표를 불러오며 해당 좌표에 대한 압축 후 값을 출력하면 되는 문제이다.

각 입력받은 좌표는 중복될 수 있기 때문에 중복을 제거한 한 개의 좌표 값에 대한 압축 후의 결과 값을 딕셔너리에 저장한다. 이때 압축 후 결과 값은 작은 순서대로 그 번호가 주어지므로 좌표 값을 오름차순으로 정렬한 뒤, 각 좌표에 대한 압축 결과 값을 저장한다.

원래 좌표를 하나씩 불러오며 해당 좌표를 key로 하는 value 값을 출력한다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 좌표의 개수를 입력받는다. N = int(sys.stdin.readline())
  3. 좌표를 입력받아 리스트로 저장한다. num = list(map(int, sys.stdin.readline().split()))
  4. 중복을 제외한 좌표를 오름차순으로 정렬하여 새로 저장한다. li = sorted(list(set(num)))
  5. 좌표 값과 각 좌표에 해당하는 압축 값을 딕셔너리로 저장한다. d = {li[i] : i for i in range(len(li))}
  6. 모든 좌표를 원래 순서대로 불러오며 for i in num
  7. 각 좌표에 해당하는 압축 값을 출력한다. print(d[i], end=' ')
반응형

3. 소스코드

import sys

n = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))

li = sorted(list(set(num)))
d = {li[i] : i for i in range(len(li))}
for i in num:
    print(d[i], end=' ')
728x90
반응형