[백준] 10885번 - 수열의 장인
ucpc 2015 예선 문제.
n의 크기가 최대 100,000 이라 O(nlogn) 혹은 O(n) 의 시간복잡도를 갖는 해결 방법이 필요한 문제이다.
문제 풀이에 어려움을 느껴 wasd222님의 포스트을 참고했다.
수열에 등장하는 수가 -2 이상 2 이하의 정수이므로 2 혹은 -2의 개수에 따라 답이 정해진다.
2 혹은 -2가 없다면 답은 0 혹은 1이 된다. n이 2 이상이므로 -1은 어떤 수열이 주어지던 정답이 될 수 없다.
2 혹은 -2가 수열에 없다면 수열 원소들 중 최대 원소가 답이 되므로, 처음에 수열을 입력받을 때 최대 원소를 ans에 기록해둔다.
알고리즘은 Greedy하게 진행된다. 주어진 수열을 좌->우, 우->좌 이렇게 2번 선형 탐색한다. 탐색할 때 2 혹은 -2의 개수(nowTwo), 음수의 개수(nowMinus) 를 카운트한다. 음수의 개수가 짝수일 때마다 수열 내 연속으로 등장하는 2 혹은 -2의 최대 개수를 갱신한다. 이 때, 수열 원소 최대값이 0이 아니라면 정답은 확실하게 1 이상이므로 ans값을 1로 만들어준다.
탐색을 끝낸 뒤에는 수열에서 연속으로 등장한 2 혹은 -2의 최대 개수(ansTwo) 만큼 ans에 곱해주고, 정답을 출력한다.
1 |
|