아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Luna Likes Love

면접 대비

시간 제한2초메모리 제한512 MB

요약
각 번호가 두 번씩 나오는 2n명의 줄에서 인접한 두 사람을 바꾸거나 인접한 같은 번호 쌍을 제거할 수 있을 때, 모든 쌍을 제거하는 최소 행동 횟수를 구한다.
난이도

보통10점 중 7점

유형
그리디, 스택, 배열, 구현
정답자
아직 제출이 없습니다

문제

Luna는 엉뚱한 생각을 떠올렸다. 친구 2n2n명을 한 줄로 세우고, 각자에게 11 이상 nn 이하의 정수를 하나씩 나눠 주었다. 각 수는 정확히 두 번씩 사용된다. 같은 수를 받은 두 친구가 한 커플을 이룬다.

Luna는 nn개의 커플을 모두 데이트에 보내려고 한다. 하지만 일이 그렇게 간단하지는 않다. 어떤 커플을 데이트에 보내려면, 그 커플을 이루는 두 친구가 줄에서 서로 이웃해 있어야 한다. 즉, 두 사람 사이에 다른 사람이 서 있으면 안 된다. Luna가 할 수 있는 행동은 두 가지다.

  • 줄에서 서로 이웃한 두 친구를 맞바꾼다.
  • 어떤 커플이 줄에서 서로 이웃해 있으면, 그 커플을 데이트에 보낸다. 그러면 그 커플은 줄에서 빠지고, 남은 친구들이 빈자리를 메우도록 이동한다.

행동은 어떤 순서로든 할 수 있다. 예를 들어, 맞바꾸기를 몇 번 하고, 몇 커플을 데이트에 보낸 뒤, 다시 맞바꾸기로 돌아갈 수도 있다.

모두를 데이트에 보내는 데 필요한 최소 행동 수를 구해 보고하자.

입력

첫째 줄에 정수 nn이 하나 주어진다.

둘째 줄에 공백 하나로 구분된 2n2n개의 정수 a_ia\_i (1≤a_i≤n1 \le a\_i \le n)가 주어진다. 이는 줄에 선 친구들이 순서대로 받은 수의 나열이다.

출력

첫째 줄이자 유일한 줄에, 모든 커플을 데이트에 보내기 위해 Luna가 해야 하는 최소 행동 수를 출력한다.

힌트

첫 번째 예제에서 Luna는 세 번째 친구와 네 번째 친구를 맞바꾸는 것으로 시작할 수 있다. 이 맞바꾸기 뒤 줄은 다음과 같다: 3 1 1 2 2 3.

그다음 수 1인 커플과 수 2인 커플을 데이트에 보낼 수 있다(순서는 상관없다). 이렇게 하고 나면 수 3인 두 친구가 줄에서 이웃하게 되고, Luna는 이들도 데이트에 보낼 수 있다.

이 해법은 총 4번의 행동을 쓴다. 맞바꾸기 한 번과 데이트 세 번이다.

예제2

  1. 예제 1

    입력
    3
    3 1 2 1 2 3
    
    예상 출력
    4
    
  2. 예제 2

    입력
    5
    5 1 2 3 2 3 1 4 5 4
    
    예상 출력
    7