하나 둘 셋

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

길이가 NN인 배열 AA가 있다. 이 배열은 11, 22, 33 세 값으로만 이루어져 있다. 우리는 이 배열에서 다음 조건을 만족하는 세 인덱스의 순서쌍 (i,j,k)(i, j, k)들을 최대한 많이 찾으려고 한다. 배열의 세 인덱스 ii, jj, kk, (0i<j<k<N0 ≤ i < j < k < N)에 대해서 A\[i]=1A\[i] = 1, A\[j]=2A\[j] = 2, A\[k]=3A\[k] = 3이거나, A\[i]=3A\[i] = 3, A\[j]=2A\[j] = 2, A\[k]=1A\[k] = 1이어야 한다. 단, 한 인덱스는 최대 한 개의 순서쌍에만 들어갈 수 있다.

예를 들어 A=1,2,3,2,3,1A = \\{1, 2, 3, 2, 3, 1\\}이 주어졌다고 하자. 조건을 만족하는 답은 (0,1,4)(0, 1, 4), (2,3,5)(2, 3, 5) 가 된다. (A\[0]=1A\[0] = 1, A\[1]=2A\[1] = 2, A\[4]=3A\[4] = 3이고 A\[2]=3A\[2] = 3, A\[3]=2A\[3] = 2, A\[5]=1A\[5] = 1)

AA가 주어졌을 때, 조건을 만족하는 순서쌍을 최대한 많이 찾아서 보고하는 프로그램을 작성하라.

여러분은 다음 함수를 작성하여야 한다.

  • void maximize( vector<int> A ) : A는 길이 NN인 vector로, 11, 22, 33 세 값으로만 이루어 져 있다. maximizeA에서 문제의 조건에 맞는 순서쌍 (i,j,k)(i, j, k)들을 최대한 많이 찾아내고, 찾아낸 (i,j,k)(i, j, k) 하나마다 grader의 answer(int i, int j, int k) 함수를 정확하게 한 번 호출한다. 최대 개수의 순서쌍들을 찾는 방법이 여러 가지인 경우 그 중 어떤 것을 찾아도 좋다. 또, 순서쌍들끼리의 호출 순서는 무시된다. 즉, 문제의 예에서는 answer(0, 1, 4)를 호출하고 answer(2, 3, 5)를 호출해도 되고, answer(2, 3, 5)를 호출한 후 answer(0, 1, 4)를 호출해도 된다.

제한

  • 3N15,0003 ≤ N ≤ 15\\,000