[좌표압축]-18870번
My answer (Memory Error)
import sys
n=int(sys.stdin.readline())
tmp,b=[0]*2000000001,[]
board=dict()
a=list(map(int,sys.stdin.readline().split()))
for i in a:
tmp[len(tmp)//2+i]+=1
for idx,i in enumerate(tmp):
if(i!=0):
for j in range(i):
b.append(idx-len(tmp)//2)
idx=-1
for i in b:
if(i not in board):
idx+=1
board[i]=idx
for i in a:
print(board[i],end=" ")
Another answer
import sys
input =sys.stdin.readline
n = int(input())
arr = list(map(int,input().split()))
s = list(sorted(set(arr)))
dic={value:index for index,value in enumerate(s)}
for i in arr:
print(dic[i],end=" ")
더보기
우선 내 코드는 런타임(메모리)에러가 떴다. 왜 저렇게 어렵게 풀었냐면 그냥 간단하게 정렬해서 푸는 것도 시간초과가 뜬것같아서 저번에 푼 비슷한 유형이 기억나서 똑같이 정렬을 하지않고 빈 리스트의 해당 인덱스에 넣어 정렬한 것처럼 보이게 하려했는데, 이문제는 저번 문제와는 다르게 수의 범위가 너무 컸던 것 같다. 저번 문제는 수 정렬하기3니까 참고해봐라. 아무튼 내 코드는 안돌아갔고, 아래 코드는 그냥 정렬하고 그 수가 몇번 들어갔는지를 enumerate에서 인덱스를 이용해서 딕셔너리로 만들어서 출력했다. 그냥 이렇게 하면 됐구나..
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python/백준] #10845- [큐] (0) | 2021.11.30 |
---|---|
[Python/백준] #9012- [괄호] (0) | 2021.11.30 |
[Python/백준] #10828- [스택] (0) | 2021.11.28 |
[Python/백준] #11004- [K번째 수] (0) | 2021.11.28 |
[Python/백준] #11652- [카드] (0) | 2021.11.28 |