windy10928   5년 전

40 프로 정도에서 틀린다고 나오네요

제가 푼 방식은 dfs를 이용해 먼저 고장나지 않은 버튼들의 조합으로 이동하고자 하는 채널 N 과 차이가 가장 적은 숫자를 구합니다.

그리고 마지막에 아래 두 값을 비교해 최소값을 출력합니다.

  1. 구한 숫자를 누른 횟수(자리수)  + N과의 차이
  2. 최초 채널 100 에서 +,- 버튼만을 이용해 이동한 값 

일단 이렇게 풀었는데, 뭐가 틀린지 모르겠네요. 백트래킹이 잘못된건가요.

djm03178   5년 전

차이의 최솟값이 최적은 아닙니다.

944 7

2 3 4 5 6 7 9

이 경우 888 입력 후 위로 56번 올라간 59회가 정답이지만, 이 코드는 1000을 888보다 먼저 탐색하기 때문에 1000 입력 후 아래로 56번 내려간 60을 출력합니다.

djm03178   5년 전

그리고 55~57줄에 백트래킹이라고 하신 부분은 사실 무의미합니다. cnt와 sum은 매개 변수이므로 모두 지역 변수이기 때문에, 재귀호출할 때마다 새로 스택에 만들어지고 함수가 끝날 때마다 없어지는, 즉 매 호출마다 서로 전혀 다른 변수들이기 때문에 이번 호출에서 값을 조정한 것이 이전 호출에서의 값에 아무런 영향을 주지 않기 때문입니다.

댓글을 작성하려면 로그인해야 합니다.