스도쿠(sdoku) 알고리즘 아시는분 계신가요?

bingsinson의 이미지

군대갔다와서 오랜만에 공부좀해보려니까 아무것도 모르겠네요

요즘 스도쿠가 유행이길래 간단하게 한번 만들어보려고 하니까..

안되네요

혹시 알고리즘 알고 계신분 있나요?

문제푸는 알고리즘이 아니라 문제만드는 알고리즘이요

인터넷찾아봐도 문제푸는 것에 대한 알고리즘만 있고 만드는데에 관한 알고리즘은

없네요..

Bini의 이미지

문제푸는는 거나 만드는거나 다를게 있나요?
임의의 위치를 선택하고 규칙에 어긋나지 않는 무작위수를 대입한다. 아닌가요?
제생각에는 이러면 될것 같은데.....

bingsinson의 이미지

bini // 첨엔 그렇게 생각하고 짜봤는데 막상 짜보니까 안되네요

제가 잘못 짠건지...^^;; 그래서 답이랑 문제랑 알고리즘이 틀리구나 라고 생각을..

semmal의 이미지

전혀 듣도 보도 못한 것이라 다른 분 답글 다시면 훔쳐(?)보려 했는데, 궁금해서 못참겠군요.

만약!! 오늘 안에 안가르쳐 주시면!! 바로 구글에서 찾아보겠습니다.

------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

Bini의 이미지

검색엔진에서 스도쿠를 치시면 많이 나올겁니다 ^^;
저도 개인적으로 스도쿠를 풀어본적은 한번도 없읍니다.
물론 스도쿠를 푸는 간단한 프로그램은 짜본적은 있지만.....
일반적인 9x9 외에도 여러종류가 있는것 같더군요.

9x9의 형태는 간단합니다. 9x9의 행렬을 상상하세요
아래의 규칙에 맞게 수를 대입시키면 됩니다.

임의의 가로줄에 1..9의 수가 반드시 하나씩 존재
임의의 세로줄에 1..9의 수가 반드시 하나씩 존재
임의의 3x3행렬에 1..9의 수가 반드시 하나씩 존재

위에서 임의의 3x3이란 가로 1..3 세로 1..3 이 하나의 3x3의 행렬,
다음 가로 4..6 세로 1..3이 하나의 3x3의 행렬..., 가로 1..3 세로 4..6 이 또하나의 3x3의 행렬... 아시겠죠.

익명 사용자의 이미지

그건 그렇게 쉬운 문제가 아닙니다.
제가 여러번 프로그램을 짜면서 1부터 5행까지의 겹치지 않는 난수 발생은 가능했습니다만, 5행까지의 난수 발생이 완성 됐다면 그 때부터 답은 하나가 되는데 6행에서의 잘못된 값이 들어오게 되면 7행에서의 무한루프... 그 무한 루프를 체크할 방법도 생각해봤습니다만 쉽지만 않네요.

lacovnk의 이미지

잘 만드는 게 생각보다 쉽지 않을 것 같습니다... 푸는 건 쉽습니다. (빠르게 만들기 위해서 knuth 아저씨의 춤추는 알고리즘이던가도 등장하지만..)

다음과 같은게 궁금하기도 합니다.

주어진 문제에 해답이 하나만 있는 것을 증명할 수 있는가?
주어진 문제에 해답이 존재한다는 것을 증명할 수 있는가?

만일 해의 존재여부를 알 수 없다면 문제를 만들고도 이 것이 풀릴 수 있는 문제인지 알 수가 없겠죠? 그렇다면 문제를 random 생성하고, 유한 시간동안 풀기 시도를 해서 풀리면 이걸 "만든 문제다"라고 하기에는... 문제 만드는 알고리즘이라고 할 수 없겠죠?

"항상 풀릴 수 있는 문제를 생성하는 알고리즘"이 존재하지만, "주어진 문제에 해답의 존재 여부를 답하는 알고리즘"이 존재하지 않는 상황이 존재할 수 있을까요?

슬슬 헷갈립니다 -o-;

예전에 찾아보면서 언뜻 관련 내용을 본 것 같긴 한데..

Bini의 이미지

해가 없는 경우도 있나요? 몰라서요 ^^; 저는 해가 항상 존재한다고 가정하고 말씀드렸는데......

해가 항상 존재한다고 가정했을때 단순히 문제만을 만드는 경우라면 될것 같구요.

문제를 만들고 해답을 검증하고 해답을 제시하는 프로그램이라면.....
해가 여러개 일때라도 정답의 판정에는 문제가 없지만, 정답을 요구하는 경우라면......
난이도를 조절하는것도 그렇고.....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.