Luna Likes Love
면접 대비시간 제한2초메모리 제한512 MB
각 번호가 두 번씩 나오는 2n명의 줄에서 인접한 두 사람을 바꾸거나 인접한 같은 번호 쌍을 제거할 수 있을 때, 모든 쌍을 제거하는 최소 행동 횟수를 구한다.
문제
Luna는 엉뚱한 생각을 떠올렸다. 친구 명을 한 줄로 세우고, 각자에게 이상 이하의 정수를 하나씩 나눠 주었다. 각 수는 정확히 두 번씩 사용된다. 같은 수를 받은 두 친구가 한 커플을 이룬다.
Luna는 개의 커플을 모두 데이트에 보내려고 한다. 하지만 일이 그렇게 간단하지는 않다. 어떤 커플을 데이트에 보내려면, 그 커플을 이루는 두 친구가 줄에서 서로 이웃해 있어야 한다. 즉, 두 사람 사이에 다른 사람이 서 있으면 안 된다. Luna가 할 수 있는 행동은 두 가지다.
- 줄에서 서로 이웃한 두 친구를 맞바꾼다.
- 어떤 커플이 줄에서 서로 이웃해 있으면, 그 커플을 데이트에 보낸다. 그러면 그 커플은 줄에서 빠지고, 남은 친구들이 빈자리를 메우도록 이동한다.
행동은 어떤 순서로든 할 수 있다. 예를 들어, 맞바꾸기를 몇 번 하고, 몇 커플을 데이트에 보낸 뒤, 다시 맞바꾸기로 돌아갈 수도 있다.
모두를 데이트에 보내는 데 필요한 최소 행동 수를 구해 보고하자.
입력
첫째 줄에 정수 이 하나 주어진다.
둘째 줄에 공백 하나로 구분된 개의 정수 ()가 주어진다. 이는 줄에 선 친구들이 순서대로 받은 수의 나열이다.
출력
첫째 줄이자 유일한 줄에, 모든 커플을 데이트에 보내기 위해 Luna가 해야 하는 최소 행동 수를 출력한다.
힌트
첫 번째 예제에서 Luna는 세 번째 친구와 네 번째 친구를 맞바꾸는 것으로 시작할 수 있다. 이 맞바꾸기 뒤 줄은 다음과 같다: 3 1 1 2 2 3.
그다음 수 1인 커플과 수 2인 커플을 데이트에 보낼 수 있다(순서는 상관없다). 이렇게 하고 나면 수 3인 두 친구가 줄에서 이웃하게 되고, Luna는 이들도 데이트에 보낼 수 있다.
이 해법은 총 4번의 행동을 쓴다. 맞바꾸기 한 번과 데이트 세 번이다.