간만에... 시간 초과를 맞이했다... 세상에서 시간 초과랑 메모리 초과가 다 싫어 ~~ ..
저번 시간까지 자랑스럽다던 나 어디갔어... 사실 이건 문제부터 이해를 못했다 ㅎ 좌표 압축이라길래 내가 이런 걸 배웠나? 싶었지만 이미 문제에서 친절히 좌표 압축의 결과를 설명해주고 있었음 ^^!
해당 좌표보다 더 작은 숫자들을 출력하는 문제였다. set이랑 list 이용하면 쉽겠네 ~ 라고 생각한 내가 바보지 ~~~
import sys
N = int(sys.stdin.readline())
num = list(map(int, sys.stdin.readline().split()))
set_num = list(set(num))
set_num.sort()
cnt = []
for i in range(N):
cnt.append(set_num.index(num[i]))
for i in cnt:
print(i, end=' ')
이렇게 하면 답은 잘 나온다. 나는 항상 이게 문제다. 답은 잘 나오는데 어디 하나 나사가 빠진... 이번 풀이에서 깨달은 것은,
라는 것. 저번에도 count 함수 썼다가 시간 복잡도를 해결 못해서 꽤 어려움을 겪었던 것 같다. 나중에 코테에 저런 게 나오면 고민을 해보아야겠지?
결론은 난 이 문제를 못 풀었다 ^^...
참고한 블로그는 아래와 같다.
(https://eunhee-programming.tistory.com/116)
코드는,
import sys
N = int(sys.stdin.readline())
arr = list(map(int,sys.stdin.readline().split()))
arr2 = []
arr2 = list(sorted(set(arr)))
dic = {arr2[i]:i for i in range (len(arr2))}
for i in arr: print(dic[i],end=' ')]
간결해...! 여기서 포인트는 딕셔너리를 활용했다는 것이다.
와우 어떻게 이렇게 생각하지? index() 함수를 이용해서 해당 값을 찾는 부분이 이렇게 표현될 수 있다니... 놀랍도다.
이 블로그에서 언급한 딕셔너리의 특징은,
오호...! 놀라워 놀라워. 앞으로 리스트말고 튜플이나 딕셔너리와 같이 다양한 자료구조를 사용해보도록 해야겠다!!!
오늘도 신기한 알고리즘의 세계 끝!