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사용법을 익히고자 찾아서 공부하였다.