질문이 정확히 어떤것인 지모르겠지만, 해당 코드는 정상적으로 수행됩니다.
그리고 답 한개만 출력할 수 있게끔 잘 설계되었습니다.
48번째 줄 바로 위 go(z+1) 위의
c[x][i] = c2[y][i] = c3[square(x, y)][i] = true; a[x][y] = i;
와 a[x][y] = 0; c[x][i] = c2[y][i] = c3[square(x, y)][i] = false;
는 백트래킹의 기본개념입니다.
2580번 - 스도쿠
저는 문제를 많이 접해보지도 않아서 확실히는 몰라요.
하지만 대체로 알고리즘 분류가 DFS similar으로 되어있는 것과 백트래킹으로 되어있는 것은 확연히 달랐어요. 백트래킹도 큰틀에서 DFS similar에 포함되겠지만요...
재귀를 이용한 탐색 문제는 일반적으로 dfs처럼 트리의 노드 끝까지 탐색하는 것도 있지만...
좁은 제 식견으로 표현하자면,,, 더 다양하고 난이도 있다? 라고 생각이 들었어요. 트리형태만이 아니라, 그래프, Memoization... 대체적으로 아직 저한텐 확실히 어려운 것같고.
백트래킹의 경우 재귀 구조는 비슷하나, 문제를 트리형태 처럼 보고, 경우의 수를 선택해서 내려갔다가, 그거 아니면 다시 원래대로 돌아오고.... 조금 더 쉽고 해볼만할거같다? 라는 느낌?..ㅇ
스도쿠와 같은 문제는 다음칸에 들어갈게 없다고 판단하면 현재상태서 거슬러올라가는 게 백트래킹의 특징이였다면
아래 링크문제 (2017 삼성 SW 기출문제) 의 경우에는 재귀를 이용해 반드시 트리 노드의 끝단까지 도달해야만 의미가 있는 전형적인 완전 탐색 문제이에요. 그리고 dfs를 이용하여 풀 수 있어요.
https://www.acmicpc.net/proble...
도움이 되었을지는 모를겠습니다 ㅠ.ㅠ.
댓글을 작성하려면 로그인해야 합니다.
dydsj0920 5년 전
48번째 줄에 백트랙킹을 주석처럼 해석하는 것이 맞나요?
맞다면 백트랙킹에 걸리는 테스트케이스가 있을까요?
디버그 찍어보는데 저쪽에 걸리는 경우를 못찾았습니다.