목차
https://www.acmicpc.net/problem/18870
시간 초과난 코드 1
n=int(input())
arr=list(map(int,input().split()))
arr2 = sorted(list(set(arr)))
for i in range(n):
for j in range(len(arr2)):
if arr[i]==arr2[j]:
print(j,end=' ')
break
우선 정렬 sorted를 사용해서 nlog이지만
위 출력하는 로직에서 최대 n번 X arr2의 길이 (n번)이므로 O(N^2)이다.
시간 초과난 코드 2
n=int(input())
arr=list(map(int,input().split()))
arr2 = sorted(list(set(arr)))
for x in arr:
print(arr2.index(x), end = ' ')
위 출력 로직 또한 arr을 순회하는동안 N번 arr2를 순회하면 Index를 찾는동안 n번 으로 O(N^2)이다.
정답 코드
n=int(input())
arr=list(map(int,input().split()))
arr2 = sorted(list(set(arr)))
dic=dict()
for i in range(len(arr2)):
dic[arr2[i]]=i
for x in arr:
print(dic[x], end = ' ')
딕셔너리를 사용해서 해쉬 자료구조로 O(1)으로 탐색을 해서 최종적으로 nlogn으로 해결 !
'코딩테스트[파이썬] > 백준 (BOJ)' 카테고리의 다른 글
백준 1934 - 최소공배수[유클리드 호제법] (2) | 2024.02.16 |
---|---|
백준 11659 -구간 합 (0) | 2024.02.15 |
백준 - 10989 - 정렬 3 (0) | 2024.02.13 |
백준 2839 - 설탕 배달 [부르트포스] (2) | 2024.02.13 |
백준 1436 - 영화감독숌[부르트포스] (0) | 2024.02.13 |