M가지 종류의 인형 N개가 일렬로 놓여 있을 때, 뽑아낸 인형을 다시 끼워 넣어 같은 종류가 모두 연속하도록 만드는 최소로 뽑아야 하는 인형 수를 구한다.
어려움8동적 계획법비트 연산누적 합아직 제출이 없습니다시간 제한2초메모리 제한512 MBJOI 관계자 한 명이 장난감 가게에서 일한다. 오늘은 가게 안의 인형 코너를 정리하게 되었다.
인형 코너의 선반에는 인형 N개가 왼쪽에서 오른쪽으로 한 줄로 놓여 있다. 선반은 칸막이로 N개의 칸으로 나뉘어 있고, 한 칸에는 인형을 하나 둔다. 이 가게는 모두 M종류의 인형을 팔고, 각 종류에는 1부터 M까지 번호가 붙어 있다. 선반에 놓인 인형 N개는 각각 이 M종류 중 하나이다. 또한 모든 종류의 인형이 적어도 하나씩 있다.
보기 좋게 만들려고 같은 종류의 인형이 모두 선반에 연속해서 놓이도록 인형을 다시 배치하려고 한다. 다음 방법으로 다시 배치하기로 했다.
다시 배치한 뒤에는 같은 종류의 인형이 모두 선반에 연속해서 놓여 있어야 한다. 다시 배치하려고 꺼내는 인형 개수의 최솟값을 구하는 프로그램을 작성하라.
첫째 줄에 두 정수 N, M (1≤N≤100000, 1≤M≤20)이 공백으로 구분되어 주어진다. 인형이 N개, 종류가 M가지라는 뜻이다.
다음 N개 줄에는 각각 1 이상 M 이하의 정수가 하나씩 주어진다. 이 중 i번째 줄(1≤i≤N)의 정수는 선반의 왼쪽에서 i번째 칸에 놓인 인형의 종류이다. 모든 종류에 대해 그 종류의 인형이 적어도 하나 있음이 보장된다.
다시 배치하려고 꺼내는 인형 개수의 최솟값을 한 줄에 출력한다.
예제 1에서 처음에 놓인 인형의 종류는 왼쪽부터 차례로 1, 2, 2, 2, 1, 2, 1이다. 꺼내는 인형의 개수를 최소로 하려면 왼쪽에서 1번째와 6번째 인형을 꺼낸 뒤, 왼쪽에서 1번째 칸에 종류 2인 인형을, 6번째 칸에 종류 1인 인형을 놓으면 된다. 이때 꺼내는 인형은 2개이다.