Problem : 이중우선순위큐
유형 : 힙
문제 해석
- 주어진 명령에 맞춰 작업을 수행한 뒤, (최대, 최소) 혹은 (0, 0) 을 리턴하라.
문제 재해석
- 문자
I
가 들어온 경우 삽입 명령 - 문자
D
가 들어온 경우 삭제 명령- 지울게 없는 경우는 무시한다.
해결 전략
- 가장 큰 값, 가장 작은 값에만 관심을 가진다.
- 가장 작은 값에도 관심을 가져야 하므로,
set
을 이용한다. - 같은 값이 여러개가 있을 수 있으므로
multiset
을 이용한다.
설계, 구현
- 공백이 있는 문자열이 있으므로,
stringstream
을 통해 파싱 한다.
디버깅
s.erase(num)
으로 하면num
에 해당하는 것이 전부 지워진다.반복자
를 통해 지워야지 한 개만 지워진다.- 이를 위해 끝 부분의
value
가 뭔지를 찾고, find
를 통해iterator
를 찾은뒤,iterator
를 이용해 삭제한다.
- 이를 위해 끝 부분의
코드
1 |
|
1 |
|
피드백
stringstream
초기화 방법을 까먹었었다.ss.clear()
,ss.str(input_str)
잊지말자.
multiset
에서 한개만 지우는 법을 몰랐었다.- 기존에는
map
을 이용했었는데,multiset
사용법을 익히고자 찾아서 공부하였다.