강의로 돌아가기
devxb

6번 11번 통과하지 못하시는분들 참고하세요 (스포주의)

우선 저는 백 트래킹, 그리디로 풀었습니다.

논리

  1. 탐색가능한 모든 경우의 수를 고려한다. (백 트래킹으로 구현)
  2. 친구의 투입 순서를 정할때, 더 많은 거리를 이동할 수 있는 친구를 항상 먼저 투입해도 손해보지않는다. (그리디)

위 논리를 코드로 그대로 구현했습니다.
코드(코드의 경우 글이 길어질거 같아서 링크로 첨부합니다. Java로 구현되어 있어요) : https://github.com/devxb/JJUNalgo/tree/master/%5Bprogrammers%20kakao%5D%20%EC%99%B8%EB%B2%BD%EC%A0%90%EA%B2%80


문제
"중복 수리된 벽을 미수리 상태로 바꾸는 오류"

백트래킹 과정에서 "이미 수리한 벽을 체크"하는 과정에서 문제가 발생했습니다.
틀린 코드에서는 이미 수리한 벽을 boolean 배열을 이용해서 체크해줬고, (수리 : true, 미수리 : false)
백트래킹 진행중에, "수리"상태의 벽을 "미수리"로 바꿀때 "2명 이상의 친구에 의해서 중복 수리된 벽" 이 한명의 친구에 의해서 "미수리" 상태로 바뀌는 오류가 발생했습니다.

예를 들어, 수리 해야할 벽의 idx가 [1, 4, 7, 9, 10] 이고 친구 1이 [1, 4]벽을 수리, 친구 2가 [10, 1]벽을 수리 한 상황에서 백 트래킹 이 진행되어 친구 2가 수리한 벽을 "미수리" 상태로 변경한다면 친구 2가 직전에 수리한 벽인 [10, 1]이 "미수리" 상태로 변경됩니다.
하지만, 벽 [1]은 친구 1에 의해서 "중복 수리" 되어있는 상태지요... 따라서 친구 2에 의해서 "미수리" 상태로 변경되면 안되고 "수리"상태로 남아있어야 합니다.

실제로 6번 11번 테스트케이스가 위 상황을 저격한 테스트케이스인지는 모르겠으나... 저는 위 상황을 고치고 정답을 받았습니다.

0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.