Cyrus Hackford

Tag: 응용 프로그램

SudokuSolver의 치명적인 설계 오류를 바로잡았다

by Cyrus H. on Feb.08, 2010, under Java, Made by myself, Objective-C

처음 만들었을 당시에는 눈에 보이지 않던 결함이었다. 하지만 Star Burst Leo 스도쿠에 대해 Kippler님의 스도쿠 풀이 프로그램과 경쟁을 시켰을 때, 내 응용 프로그램이 이상하게도 오래 걸린다고 느꼈다. 왜 그런지에 대해 궁금해하던 차에 내 눈에 들어온 것은, 3×3 그리드에 중복된 숫자가 들어간 딱 그 장면이었다. 3×3 그리드 내부에 숫자 1이 두 개가 들어가 있었던 것. 그때서야 깨달았다. 내가 만든 응용 프로그램에서 입력 가능한 숫자를 얻을 때, 행과 열에서만 중복 숫자를 제거하고 3×3 그리드 내부에서는 중복을 제거하지 않았던 것.

이번 버전에서는 완벽하게 중복 숫자를 제거해서, 쓸데없는 탐색을 큰 폭으로 줄였다. 그 결과, 아까 말한 그 Star Burst Leo 스도쿠1를 풀어내는데 38초 가량이 걸리고, 그보다 더 복잡한 탐색을 요하는 Star Burst Regulus 스도쿠2를 푸는 데는 약 39초가 걸린다. 근데 어째 수치적으로 말이 안 되는 것 같다?

또, 이번 버전에서 추가된 가장 큰 기능은 실시간으로 풀이 과정을 볼 수 있다는 것이다.

새 버전의 SudokuSolver

Star Burst Regulus 스도쿠를 풀고 있다. 제일 아래의 레벨 지시자는 현재 방문중인 셀 번호를 나타낸다.

SudokuSolver 1.1.0 다운로드 페이지

덧붙임. Java 버전도 같이 수정했다.

  1. 완전히 풀어내려면 전체 셀에 총 16,127번 접근해야 한다. []
  2. 완전히 풀어내려면 전체 셀에 총 65,920번 접근해야 한다. []
4 Comments :, , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

나는 세벌식을 씁니다!

Hosted by AQUZ