티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

 

문제는 다음과 같다.

1.문자열이 "I (숫자)" 면 숫자를 리스트에 추가하고

2. "D 1" 이면 최댓값 삭제, "D -1" 이면 최솟값 삭제를 한다.

3. 최종적으로 리스트의 최댓값, 최솟값을 return 해주면 완성 (값이 없을시 [0, 0])

 

그렇게 완성한 코드. 옆에 주석을 달아놓아서 코드를 설명했다.

 

문자열 찾기 find()를 이용했는데 간단하게 설명하자면 이렇다.

 

test = "1234asdf7890"

test.find("1")	#찾은 문자열의 index를 return 해준다
>>>> 0
test.find("3")
>>>> 2
test.find("x")	#문자열을 찾지 못했으면 -1이 리턴된다
>>>> -1

 

그래서 나는 find("I")를 사용하여 문자열 I를 찾는데, -1이 아니면 해당 문자열이 있다는것을 이용했다.

sort()를 이용하여 오름차순 정렬을 해야하는데, 문자열을 그대로 쓸 경우 대소구분이 안된다. 따라서 int형으로 바꿔주었다.

pop을 이용하여 최댓값, 최솟값을 지워주는 식으로 간단히 해결했다.

 

level3인데 문제가 명확하고 시간복잡도의 차이가 크지않아서 굉장히 쉽게 풀었다.

오히려 heapq 의 존재를 몰랐던 상태에서 level1 더맵게 문제를 어떻게든 시간복잡도를 줄여보려고 노력했던게 더 공부가 많이됐던 것 같다.