티스토리 뷰
https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net


입력으로 숫자가 주어지고
주어진 숫자만큼 좌표값을 입력하게 되면 숫자가 순서대로 나열되었을 때의 인덱스 값이 출력되는 형태이다.
👩💻처음 짰던 코드 : 시간초과☠️
import sys
n = int(input())
li = []
li.append(list(sys.stdin.readline().split()))
res = list(set(li[0]))
res.sort(key = lambda x:x)
for i in li[0]:
for j in range(len(res)):
if i == res[j]:
print(j, sep=' ', end=' ')
반복문 안에 반복문이 들어있어서 시간초과가 날 것이라고 생각은 했었다...
import sys
n = int(input())
li = []
li.append(list(sys.stdin.readline().split()))
# li 리스트 안에 list형태로 숫자들을 받아줌
res = list(set(li[0]))
# 중복이 제거된 형태의 list
res.sort(key = lambda x:x)
# 오름차순의 형태로 list를 나열
for i in li[0]:
for j in range(len(res)):
if i == res[j]:
print(j, sep=' ', end=' ')
# li의 값 하나마다 res와 같은 값일 때 res의 인덱스 값을 출력
👩💻다시 짠 코드 : 성공🌈
import sys
n = int(input())
li_dic = {}
li = []
li.append(list(sys.stdin.readline().split()))
res = list(set(li[0]))
res.sort(key = lambda x:int(x))
for i in range(len(res)):
li_dic[res[i]] = i
for i in li[0]:
print(li_dic[i], sep=' ', end = ' ')
import sys
n = int(input())
li_dic = {}
li = []
li.append(list(sys.stdin.readline().split()))
res = list(set(li[0]))
res.sort(key = lambda x:int(x))
# 그냥 x로 해주게 되면 숫자의 첫번째 자리만으로 순서를 정하기 때문에
# 1000, 999 비교시 1000이 999보다 작은 숫자로 취급되게 된다.
for i in range(len(res)):
li_dic[res[i]] = i
# li_dic의 key값은 입력된 숫자(중복 포함x)
# value값은 res의 인덱스 값이므로 숫자가 작은 수부터 0,1,2, ... 의 값을 가지게 된다.
예시

for i in li[0]:
print(li_dic[i], sep=' ', end = ' ')
# li의 숫자와 값은 숫자의 value값을 출력
🚀결과🚀
* colab에서는 import sys가 불가능 하기 때문에 그냥 input()함수를 사용해주었다.

✨Point✨
1. list.sort(key = lambda x : x) 정렬 방법 기억하기
2. dictionary형태 잘 활용하기
3. print("Hello World", sep=' ', end = ' ') : 한줄로 출력하는 형태! sep, end 모두 띄어쓰기 필요!
'🦖 Programming > Python' 카테고리의 다른 글
[Python] 백준 알고리즘 2775번 : 부녀회장이 될테야 (0) | 2022.08.25 |
---|---|
[Python] 백준 알고리즘 10870번 : 피보나치 수 5 (0) | 2022.08.25 |
[Python] 백준 알고리즘 1157번 : 단어 공부 (0) | 2022.08.21 |
[Python] find() 함수 (0) | 2022.07.07 |
[Python] 백준 알고리즘 4344번 : 평균은 넘겠지 (0) | 2022.07.06 |
댓글