티스토리 뷰

문제 링크



https://www.acmicpc.net/problem/2271



문제 요약



자연수로 이루어진 크기 \(N\)인 배열 \(A\)가 주어진다. 이 때 \(1\leq P\ \lt\ Q\ \lt\ R\ \lt\ S\ \leq\ N\)을 만족하는 \(P\), \(Q\), \(R\), \(S\)에 대해 아래 두가지 수식이 만족하는 경우가 있는지 찾는 문제다.


1. \(A[Q]\ \lt\ A[S]\ \lt\  A[P]\ \lt\ A[R]\)

2. \(A[Q]\ \gt\ A[S]\ \gt\  A[P]\ \gt\ A[R]\)



문제 풀이



우선 2번 경우는 생각하지 말고 1번 경우만 생각해 보도록 하자. \(i\lt j\) 인 임의의 \(i\), \(j\)를 선택했다고 하자. 만약 \(A[i] \lt A[j]\)를 만족을 한다면 각각의 \(i\), \(j\)는 각각 \(Q\), \(S\) 후보가 될 수 있다. 그렇다면 남은 문제는 가능한 \(P\), \(R\)이 있는지 확인하는 문제로 축소가 된다. 우리는 모든 경우를 세는 것이 아니라 약점이 있는지 없는지만 확인하면 되기 때문에 이 문제를 간단하게 해결할 수 있다.


우선 약점이 존재하도록 하는 \(A[R]\)들의 후보를 생각해보자. \(R\)은 \(Q\)보다 크고 \(S\)보다는 작기 때문에 우리가 선택한 \(i\)와 \(j\)사이에 있을것이 자명하다. 이 때 \(A[P]\)값이 존재하기 위해서는 \(A[R]\)이 크면 클수록 유리하다는 사실또한 자명하다. 그렇다면 \(A[R]\)값을 \(max(A[i + 1]...A[j - 1])\)로 가정을 해도 괜찮다는 얘기가 된다.


만약 \(A[j]\)보다 큰 \(max(A[i + 1]...A[j - 1])\)값이 존재한다면 \(A[R]\)값이 존재한다는 뜻이 되고 마지막으로 가능성이 있는 \(A[P]\)만 찾으면 1번 경우의 약점을 찾게 되는 것이다. \(A[P]\)의 값은 \(A[1]...A[i - 1]\) 중에 \(A[R]\)에서 가장 가까운 작은값이 되는것이 유리하다는 것을 알 수 있다. 이를 찾는것은 \(set\)을 통해 쉽게 찾을 수 있다.


이렇게 모든 \(i\), \(j\)에 대해서 가능한 경우가 존재하는지 판단을 하면 되고 이 때 시간복잡도는 \(O(N^2logN)\)이 된다. 2번의 경우는 별도로 설명하진 않았는데 부호가 정 반대인 경우이므로 원래의 배열을 뒤집은 다음에 1번의 경우가 존재하는지 판단하는 것과 동일한 방법으로 2번의 경우를 찾을 수 있다.



소스 코드




'Problem > BOJ' 카테고리의 다른 글

1787 - 문자열의 주기 예측  (0) 2016.11.10
13352 - Target Practice  (0) 2016.11.10
3136 - 평면도  (0) 2016.11.09
9935 - 문자열 폭발  (3) 2016.11.08
2841 - 외계인의 기타 연주  (0) 2016.11.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함