퍼즐: 1번 칸에 말 올려! 2번 칸에서 말 내려!

Bubbler @bubbler@hackers.pub
문제
가로로 20개의 빈 칸이 그려진 게임판과 20개의 말이 있습니다. 각각의 빈 칸은 왼쪽부터 순서대로 1부터 20까지 번호가 매겨져 있습니다. 당신은 다음의 동작을 원하는 만큼 수행할 수 있습니다.
- 1번 칸에 말을 올려놓거나, 1번 칸에 올려져 있는 말을 제거할 수 있습니다.
- 게임판 위에 말이 적어도 한 개 있다면, 말이 있는 칸의 번호들 중 가장 작은 것을
라고 합시다. 그러면 번 칸에 말을 올려놓거나, 번 칸에 올려져 있는 말을 제거할 수 있습니다.
이때, 모든 칸에 말이 올려져 있도록 할 수 있을까요? 그렇다면 이를 위해 필요한 최소 동작 횟수는 몇 번일까요?
출처: BOJ 29225. Пещеры의 문제 내용을 퍼즐 형식으로 변경하였습니다.
풀이
스포일러
모든 칸을 채우기 위해서는 일단 20번 칸에 말을 올려야 합니다. 20번 칸에 말을 올리려면 일단 19번 칸에 말을 올려야 하고, ... 2번 칸에 말을 올리려면 일단 1번 칸에 말을 올려야 합니다.이제 k+
, 말을 내리는 동작을 k-
라고 적습니다.
- 2번:
1+ 2+
- 3번:
1+ 2+ 1- 3+
- 4번:
1+ 2+ 1- 3+ 1+ 2- 1- 4+
- 5번:
1+ 2+ 1- 3+ 1+ 2- 1- 4+ 1+ 2+ 1- 3- 1+ 2- 1- 5+
여기서
좀 더 논리적으로 설명하자면,
이제 원래의 문제로 돌아와서, 20번 칸에 말을 올리기 위해 필요한 동작의 수는