아니요, 이 코드는 정답이 아닙니다. 아래에 반례가 있습니다.
7이 들어올 때, 실제로는 [1,2,4,5,7]로 5개짜리를 만들 수 있는데
앞에 있는 (6,2) pair를 보고 (7,3) pair를 만들어 버립니다.
여담으로, lower_bound 함수는 헤더에도 있지만 std::set의 멤버함수 중에도 있습니다.
전자보다 후자가 훨씬 빠르고, 이유는 한 줄로 말하자면 std::set이 random-access iterator가 아니기 때문입니다.
(X) auto it = lower_bound(BST.begin(), BST.end(), make_pair(x, 0));
(O) auto it = BST.lower_bound(make_pair(x, 0));
bgb10 1년 전
저도 이분탐색 풀이를 떠올려서 BST를 사용해서 풀었는데요, 바로 시간초과가 뜹니다.
아마 BST가 느려서 시간초과가 난 것 같은데,
1. 혹시 해당 풀이가 '시간을 제외하고는' 맞는 풀이인지,
2. 똑같이 이분탐색을 사용한 풀이인데 직접 구현한 이분탐색은 되고, set 을 사용한 이분탐색을 하면 안될 때가 있는데,
실전에서는 어느 기준을 두고 둘 중 하나를 선택해야 하는지.
에 대해 조언해주셨으면 합니다. 감사합니다!