- Kubernetes
- 오블완
- Android
- Unix_System
- kubeflow
- Artificial_Intelligence
- tensorflow
- Linux
- programmers
- Baekjoon
- Personal_Study
- C
- 티스토리챌린지
- Univ._Study
- app
- datastructure
- SingleProject
- study
- 자격증
- cloud_computing
- Operating_System
- Database_Design
- 2023_1st_Semester
- Algorithm
- codingTest
- 리눅스마스터2급
- Python
- c++
- Image_classification
- Java
코딩 기록 저장소
[백준/Python] 18870번 : 좌표 압축 본문
문제 정보
제목 : 좌표 압축
번호 : 18870번
사용 언어 : Python
문제 링크
https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에
www.acmicpc.net
시간 제한 | 메모리 제한 |
2 초 | 512 MB |
문제
수직선 위에 N개의 좌표 X₁, X₂, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xᵢ를 좌표 압축한 결과 X'ᵢ의 값은 Xᵢ > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.
X₁, X₂, ..., XN에 좌표 압축을 적용한 결과 X'₁, X'₂, ..., X'N를 출력해보자.
입력
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X₁, X₂, ..., XN이 주어진다.
출력
첫째 줄에 X'₁, X'₂, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
입출력 예제

제한
- 1 ≤ N ≤ 1,000,000
- -10⁹ ≤ Xᵢ ≤ 10⁹
나의 풀이
입력에 대한 시간을 줄이기 위해 sys.stdin.readline()을 사용했습니다. N을 입력받아 정수형으로 변환하여 저장합니다. 공백으로 구분된 XN를 입력받아 split()로 나누어 리스트로 X에 저장합니다. 압축된 x를 저장할 Compressed_X를 딕셔너리 형태로 선언합니다.
for 루프를 이용해 리스트 X를 set으로 변환하여 중복을 제거하고, 다시 list형으로 변환하여 정렬한 후 순차적으로 접근합니다. 이때 기존의 X 형태는 달라지지 않습니다. Compressed_X에 i를 키로 하여 count를 저장합니다. 그리고 count는 1을 증가시킵니다. 모든 반복이 끝나면 리스트 X에 순차적으로 접근하는 for루프를 이용해 Compressed_X[i]로 알맞은 값을 출력합니다.
코드
import sys
input = sys.stdin.readline
N = int(input())
X = list(map(int,input().split()))
Compressed_X = dict()
count = 0
for i in sorted(list(set(X))) :
Compressed_X[i] = count
count += 1
for i in X :
print(Compressed_X[i], end= " ")
'백준 > 정렬' 카테고리의 다른 글
[백준/Java] 1181번: 단어 정렬 (0) | 2023.04.10 |
---|