backtracking 2

2014. 11. 20. 09:50Security ★ Development/알고리즘

반응형

문제는 더블릿 25 backtracking에 있는 door입니다.

문제 사이트 주소입니다.

http://183.106.113.109/30stair/door/door.php?pname=door


열린 문 2곳이 있고 앞으로 열어야 하는 문을 열린 문으로 이동하면서 이동한 거리를 카운트합니다.  이 때 이동한 거리가 가장 적은 회수를 구하는 문제입니다.

다음에 열어야 할 문은 열린 문 2군데중 한 군데와 바꿀 수 있습니다.

무조건 가까운 거리와 바꿨다가는 다음 경우의 수에서 더 많은 거리를 이동해야 할 수 있습니다.

이번에 열어야 할 문을 열린 문 2곳 중에 왼쪽문과 바꾼 경우, 오른쪽문과 바꾼 경우를 모두 트리를 타듯이 타고 내려갑니다.

열린 문이 2와 5이고

열어야 할 문이 3 4 6 5 인 경우

첫 번째 문 교체 (2-3왼) (5-3오)

두 번째 문 교체 (2-3왼 3-4왼) (2-3왼 5-4오) (5-3오 2-4왼) (5-3오 3-4오)

세 번째 문 교체 (2-3왼 3-4왼 4-6왼) (2-3왼 5-4오 3-6왼) (5-3오 2-4왼 4-6왼) (5-3오 3-4오 2-6왼) (2-3왼 3-4왼 5-6오) (2-3왼 5-4오 4-6오) (5-3오 2-4왼 3-6오) (5-3오 3-4오 4-6오)

네 번째 문 교체...

이런 경우를 탐색하도록합니다.

재귀 방식을 이용하며 교체한 문과의 거리의 누적, 교체한 문을 바꿔주면서 진행합니다.

더이상 교체할 문이 없으면 종료하며 이 때까지의 누적 회수가 다른 경우의 누적 회수보다 적을 경우 갱신해주면됩니다.


'Security ★ Development > 알고리즘' 카테고리의 다른 글

문자와 문자열 1  (0) 2014.12.03
divide and conquer 3  (0) 2014.11.25
backtracking 1  (0) 2014.11.17
queue 1  (0) 2014.11.15
if 1  (0) 2014.11.14