스위치 수를 M=N−1이라 하고 스위치 i의 작동 시각을 Ti라 하자. 인접한 스위치의 선후관계를
εi={↑,↓,Ti<Ti+1,Ti>Ti+1
로 나타낸다. 같은 부호열을 가진 두 전체 순서는 서로 겹치지 않는 스위치의 교환만으로 바뀌므로 결과와 비용이 같다. 반대로 경로에 방향을 준 그래프는 항상 DAG이므로 모든 부호열이 실제 순서로 실현된다.
가상 부호 ε0=↓, εM=↑를 둔다. 스위치 i에 대해
pi=max{j<i:εj=↓},qi=min{j≥i:εj=↑}
라 하자. 스위치 i가 실제로 만나는 두 원본 카드는 처음 위치 pi+1과 qi+1에 있던 카드다. 따라서 비용 발생 여부는 Spi+1XORSqi+1이다.
부호를 왼쪽부터 결정하면 아직 닫히지 않은 연속 하강 구간의 오른쪽 원본 카드는 미래의 첫 상승 바로 오른쪽 카드다. 정확한 위치는 필요 없고 색 0 또는 1만 필요하다.
다음 네 DP 값을 유지한다.
- Uc: 열린 하강 구간이 없고 다음 스위치의 왼쪽 원본 카드 색이 c일 때의 최소 비용.
- Dz: 하강 구간이 열려 있고 그 공통 미래 오른쪽 카드 색을 z라고 가정했을 때의 최소 비용.
현재 스위치를 i, a=Si, b=Si+1라 하자. 상승을 고르면 Uc에서 Ci[c=b]를 더해 Uc로 가고, Db에서 Ci[a=b]를 더해 Ua로 간다. 하강을 고르면 Uc에서 각 z에 대해 Ci[c=z]를 더해 Dz로 가고, Dz에서 Ci[a=z]를 더해 Dz로 간다.
US1=0으로 시작한다. 마지막 실제 스위치에서는 가상 상승을 강제하므로 상승 전이만 수행한다. 답은 마지막의 min(U0,U1)이다. 시간 복잡도는 O(N), 문자열 외 추가 메모리는 O(1)이다.
Solution written by GPT5