본문 바로가기

백트래킹

(2)
백준 [2580] 스도쿠 이전 백트래킹 문제들이 일차원 배열을 이용해, 한 줄씩 처리하는 게 가능했다면, 이 문제는 이 방법이 먹히지 않았다. 특히, 입력을 2차원 배열의 스도쿠 판만 받아야 한단 생각을 해서 많이 꼬이고 헤맸다. 이 문제에서 우리가 고려해야 할 사항은 3가지다. 1. 가로줄 2. 세로줄 3. 3*3 정사각형 맨 처음에 스도쿠 판에 저장된 데이터만 가지고 올바른 값이 들어가있는지 검증하는게 무척 어려웠다. 이전에 풀었던 N-Queen 방식대로하면 세로줄까진 어찌어찌 해결해도, 3*3 정사각형에서 매번 헤맸다. 해결방법은 생각보다 간단했다. 입력을 받고나면, 해당 위치의 가로, 세로 3*3 칸에 입력받은 숫자가 사용됐다는 것만 표시하면 된다. 그림으로 설명하자면 이렇게 입력을 받는다면 가로의 정보를 저장하는 배열엔..
백준 [9663] N-Queen 백트래킹을 이용한 문제. 생각한 방법은 3가지였다. 3번째 방법이 내가 적용한 풀이다. 1. 2차원 배열을 선언해, 퀸이 배치 될 때, 퀸의 경로에 1을 더해서, 다음 퀸이 이 자리에 오지 못하게 한다. 만약, 다른 퀸의 경로하고 겹치는 경우 1을 또 더해준다. 아래 그림이 예시다. 하지만, 이렇게 되면, 퀸 배치를 옮길 때, 복구 작업도 해줘야 하기 때문에, 시간이 오래걸리고, 코드도 깔끔하게 나오진 않았다. 2. 매 탐색마다, N 크기를 1씩 줄이기 어떤 자리에 퀸이 들어왔단 것은 해당 행과 열엔 퀸이 들어오지 못하니, 다음 재귀함수에선 (N-1 * N-1)만큼의 크기를 검사하는 방식 여기서 문제는 위의 그림에서 보듯이, 2번째 퀸이 3번째 열에 배치되면, 2번째 열에 퀸을 배치할 수 있음에도 불구하..