Search

Relative Sort Array

문제 설명 : 제공되는 두 배열에서 공통되는 요소는 조건에 맞게 앞에 설정하고, 공통되지 않은 요소는 뒤에 붙어준다
풀이 방법
요소 관리는 hash table을 사용하였으며, 마지막 오름차순으로 붙어줄 때만 sorted를 사용하였다.
시간복잡도 : O(NlogN)O(NlogN)
성공 코드
from collections import defaultdict class Solution: def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]: arr1_count_info = defaultdict(int) # O(N) arr1_set, arr2_set = set(arr1), set(arr2) result = [] # arr1에 존재하는 요소들과 각 숫자의 갯수 확인 -> O(N) for item in arr1: arr1_count_info[item] += 1 # arr2에 있는 요소를 확인한다. -> O(N) for item in arr2: for _ in range(arr1_count_info[item]): result.append(item) # arr2에 존재하지 않는 요소만 남기기 위해 remove 한다. arr1_set.remove(item) # 남아있는 요소를 추가한다. # sorted -> O(NlogN) for item in sorted(arr1_set): for _ in range(arr1_count_info[item]): result.append(item) return result
Python
복사