18870번 좌표 압축
같은 수직선 위 좌표들이 주어졌을 때
각 좌표 기준으로 좌표 위치의 숫자가 작은 좌표들의 개수를 출력 하는 문제.
처음에 문제가 이해가 가질 않았다....ㅎㅎ.....
중복된 수 제외하고 작은 숫자가 몇 개인지 출력했다.
엄청난 시간 초과의 늪........
n = int(input())
lst = list(map(int,input().split())) # 좌표 위치 리스트 화
lst_set = set(lst) # 중복값 제외
for x in lst: # 리스트 순회하면서
cnt = 0
for y in lst_set: # 중복제외한 리스트 중
if x > y: # 작은 숫자가 있으면
cnt += 1 # 카운트 + 1 을 해주고
print(cnt,end=' ') # 카운트 숫자를 출력
왜 이렇게 간단하게 생각 했는지ㅎㅎ
당연하게도 시간 초과
n = int(input()) # 좌표개수
lst = list(map(int,input().split())) # 좌표 리스트
for i in lst: # 중복제거하고 오름차순으로 정렬
print(sorted(set(lst)).index(i),end=' ')
# 해당 좌표의 인덱스 값을 출력했다.
코드가 짧아진다고 시간이 짧아지는 건 아니다..^^....
난 아직 계산 시간이 어렵다...
import sys
input=sys.stdin.readline
input() # 좌표개수 (파이썬에선 필요없어서 그냥 input() 처리..ㅎㅎ)
lst = list(map(int,input().split())) # 좌표 리스트
lst2 = sorted(set(lst)) # 오름차순 중복값제외 리스트
dic = {} # 빈 딕셔너리 생성
for i in lst2: # 좌표 : 인덱스
dic[i]=lst2.index(i)
for i in lst: # 좌표리스트의 값을 출력
print(dic.get(i),end= ' ')
딕셔너리만 만들었을 뿐
딕셔너리를 리스트 순회하면서 '리스트의 요소 : 리스트 요소의 인덱스'로 채워넣었더니 역시나 시간 초과
import sys
input=sys.stdin.readline
input()
lst = list(map(int,input().split()))
lst2 = sorted(set(lst))
dic = {lst2[i] : i for i in range(len(lst2))}
# 길이를 활용해서 숫자로 순회하고
# '리스트의 i위치 요소 : 숫자' 로 딕셔너리 채우기
for i in lst: # 좌표리스트 순회
print(dic[i],end= ' ') # 딕셔너리의 값 출력
이렇게 겨우 통과 할 수 있었다
요즘 계속 시간 초과와의 싸움이다..
채점중에서 퍼센트가 천천히 올라가면 너무 조마조마 하다.
계산 시간도 금방금방 파악할 수 있는 날이 오길 !