공 바꾸기

면접 대비

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

요약
4개의 박스를 캐시처럼 활용해 숫자 카드를 순서대로 처리할 때, 교체할 공을 최적으로 골라 삽입과 교체 횟수의 총합을 최소화합니다.
난이도

보통10점 중 6점

유형
그리디, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

0부터 9까지의 숫자가 하나씩 적힌 공 10개가 있다. 또한 0부터 9까지의 숫자 중 하나가 적힌 카드 여러 장과, 공 하나를 담을 수 있는 상자 4개가 있다. 같은 숫자의 카드는 여러 장 나올 수 있지만, 각 숫자의 공은 하나뿐이다.

카드를 주어진 순서대로 한 장씩 처리한다. 카드에 적힌 숫자와 같은 공을 다음 규칙에 따라 상자에 넣어야 한다.

  1. 그 공이 이미 어떤 상자에 들어 있으면 아무 일도 하지 않는다.
  2. 빈 상자가 있으면 그 공을 빈 상자에 넣는다. 이것을 삽입 연산이라고 한다.
  3. 빈 상자가 없으면 상자 안의 공 하나를 꺼내고 새 공을 넣는다. 이것을 교환 연산이라고 한다.

카드열이 주어졌을 때, 모든 카드를 순서대로 처리하는 데 필요한 삽입 연산과 교환 연산의 총횟수가 최소가 되도록 하는 최소 연산 수를 구하라.

입력

첫째 줄에 뽑은 카드의 장수 n이 주어진다. (0 <= n <= 100)

n이 0보다 크면 둘째 줄에 n개의 숫자가 공백으로 주어진다. 이 숫자들은 카드에 적힌 숫자를 뽑힌 순서대로 나타내며, 각각 0 이상 9 이하이다.

출력

필요한 최소 연산 수를 출력한다.

예제2

  1. 예제 1

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

    입력
    9
    1 2 0 4 5 6 4 1 2
    
    예상 출력
    6