티스토리 뷰

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 모두 띄어쓰기 필요!
댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday