문제 링크입니다: https://www.acmicpc.net/problem/2957
N은 최대 300,000이고 이진 탐색 트리를 구성할 때 최악의 경우 skewed binary tree가 되기 때문에 시간복잡도가 O(N^2)이 될 수가 있습니다.
따라서, upper_bound를 이용해 풀어야하는 문제였습니다.
처음 들어오는 숫자는 무조건 root가 되고,
이후에 들어오는 숫자는 upper_bound를 이용해 아래와 같은 두 조건을 검사해야합니다.
i) 트리 내 제일 큰 숫자가 아닐 경우
ii) 트리 내 제일 작은 숫자가 아닐 경우
검사한 두 조건에서 구한 높이 중 더 높은 값을 C에 더하고 해당 숫자는 그 높이에 있는 노드의 자식노드이기 때문에 map에 저장할 때는 (해당 높이 + 1)을 저장해줘야합니다.
* kks227님 풀이를 참고해서 풀었습니다. 항상 감사합니다.
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 6087번 레이저 통신 (0) | 2019.10.13 |
---|---|
백준 1981번 배열에서 이동 (2) | 2019.10.08 |
백준 2933번 미네랄 (0) | 2019.10.07 |
백준 2186번 문자판 (7) | 2019.10.03 |
백준 5635번 생일 (2) | 2019.10.02 |