백준
[백준] 18870번 : 좌표 압축 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 11. 16. 14:56
728x90
반응형
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에
www.acmicpc.net
1. 문제 설명
2. 풀이과정
해당 문제는 각 좌표를 압축했을 때의 값을 딕셔너리에 저장하고 원래 좌표를 불러오며 해당 좌표에 대한 압축 후 값을 출력하면 되는 문제이다.
즉, 각 X1, X2, ... XN을 입력받아 각 값이 몇 번째로 작은지 해당 값 위치에 맞춰 출력하면 되는 문제이다.
각 값을 입력받고 작은 값부터 번호를 매겨준 뒤 값에 맞는 번호를 출력하면 된다.
각 입력받은 좌표는 중복될 수 있기 때문에 중복을 제거한 한 개의 좌표 값에 대한 압축 후의 결과 값을 딕셔너리에 저장한다. 이때 압축 후 결과 값은 작은 순서대로 그 번호가 주어지므로 좌표 값을 오름차순으로 정렬한 뒤, 각 좌표에 대한 압축 결과 값을 저장한다.
원래 좌표를 하나씩 불러오며 해당 좌표를 key로 하는 value 값을 출력한다.
- sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. 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=' ')
반응형
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
반응형