Informatica Online Judge

  보드게임 [2105 / 0839]

Time Limit(Test case) : 2000(ms)
Number of users who solved : 16   Total Tried : 42


The Champion of this Problem (C++) : icp1481 - 0ms / 588byte
My Best Submission (C++) : N/A

[koistudy.net (unkonwn)]
Writer ID : [gs16042]

Background

심심한 경곽이는 어느 날 게임을 하나 하기로 했다.
아래와 같이 중앙과 1, 2, 3, 4로 이루어진 게임판이 있다. 경곽이는 말 A, B를 중앙에 놓고 게임을 시작한다.

게임이 시작되면, 경곽이는 1,2,3,4로 이루어진 수열을 하나 받게 된다. 이 수의 순서대로 A 또는 B를 그 위치로 이동시킨다. 이 때 중앙을 지나갈 수는 있지만, 중앙에 멈춰 있을 수는 없다. 단, A와 B는 맨 처음 시작할 때를 제외하고는 같은 위치에 있을 수 없다.
말을 이동시키는 데에는 에너지가 필요하다.

맨 처음 중앙에서 이동할 때는 2의 에너지가 필요하고, (0->1),(0->2),(0->3),(0->4)
근접한 곳으로 이동할 때는 3의 에너지가 필요하고, (1<->2),(2<->3),(3<->4),(4<->1)
현재 위치를 다시 밟을 때는 1의 에너지가 필요하고, (1<->1),(2<->2),(3<->3),(4<->4)
건너편 위치로 이동할 때에는 4의 에너지가 필요하다. (1<->3),(2<->4)
게임의 목표는 가장 최소의 에너지를 사용하여 주어진 수열로 말을 옮기는 것이다.
예를 들어 1->2->3->3->4일 경우 (0,0)->(0,1)->(0,2)->(3,2)->(3,2)->(4,2)로 11의 에너지를 사용하는 것이 최선이다.

Input

수열은 0이 나오기 전까지 계속 입력된다. 0은 수열의 입력이 끝났다는 뜻이다. 이 때, 수열의 길이는 100,000을 넘지는 않는다.

Output

입력된 수열대로 말을 옮겼을 때 최소의 에너지 사용량을 출력한다.

IO Example

입력1
2 3 2 4 0

출력1
8

Submit : [C/C++] | [C++11] | [Obj-C] | [Java] | [Python]
Prob Analysis : [Problem Statistics] | [Solution]