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
반응형
'백준' 카테고리의 다른 글
[백준] 1620번 : 나는야 포켓몬 마스터 이다솜 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.21 |
---|---|
[백준] 7785번 : 회사에 있는 사람 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.20 |
[백준] 14425번 : 문자열 집합 - 파이썬(Pyton) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.19 |
[백준] 10815번 : 숫자 카드 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.18 |
[백준] 25305번 : 커트라인 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.14 |
[백준] 2587번 : 대표값2 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.12 |
[백준] 19532번 : 수학은 비대면강의입니다 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.10 |
[백준] 24313번 : 알고리즘 수업 - 점근적 표기 1 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.11.09 |