1. Kralj원형 구조에서 푸는 문제들은 그대로 풀면 짜증나거나 어려운 경우들이 많기 때문에 선형 구조로 환원시키는 것이 중요하다. 이 문제에서도 그러한 것이 가능하다. 어떠한 자리 i에 대해서, 어떤 몬스터들은 그 자리에 앉기 위해 달려들 것이고, 어떤 몬스터들은 그 자리에 실제로 앉을 것이다. flux(i) = (i번째 자리에 앉으려고 온 몬스터의 수) - 1이라고 하자. 1은 그 자리에 실제로 앉아서 싸우는 몬스터를 뜻한다. flux(i)의 부분합을 한번 그래프로 그려보자. 0점에서 올라갔다 내려갔다 했다가 다시 0점으로 오게 될 것이다. 이 중 최소를 찍는 위치가 있는데, 여기를 중심으로 왼쪽과 오른쪽 구간을 바꿔보자 (cyclic shift). 그렇다면, 이 그래프는 0점에서 올라가다가 내려가..
1. 점 고르기모든 n^2개의 점을 잡아서, 두 점을 최대 / 최소로 하는 직사각형이 존재할 수 있는지를 판별하면 간단하게 풀 수 있다. 이 존재성은 단순한 O(1) 식으로 판단할 수 있어서, 시간 복잡도는 n^2이다. 난 n^2lgn에 풀었는데 내 풀이는 부끄러우니 설명을 생략한다... 2. Number SetsP 이상의 모든 prime factor를 열거해야 할 것 같지만, 실제로 필요한 건 P 이상 1000000 이하의 prime factor 뿐이다. 1000001 이상의 prime factor는 중요하지 않은 게, B - A
1. MP3 Songs아무 생각 없이 아스키 순으로 정렬하면 나옴. 앞으로는 셋에 이런 문제를 넣지 않겠습니다. 2. Reconstruction Trees올바른 입력임을 가정할 때 preorder와 inorder가 주어지면 유일하게 트리를 결정할 수 있다. preorder의 맨 앞에 있는 원소가 루트이고, inorder에서 이 루트를 찾으면, 왼쪽 서브트리와 오른쪽 서브트리를 찾을 수 있다. 우리는 여기서 루트와, 왼쪽 서브트리의 preorder / inorder, 오른쪽 서브트리의 preorder / inorder를 찾을 수 있기 때문에 재귀적으로 전체 트리 모형을 유추할 수 있다. 이 트리를 postorder traversal하면 된다. 여담으로 트리를 만든다는 식으로 서술했지만 실제로는 찾아가면서 ..
- Total
- Today
- Yesterday