You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 스도쿠 문제 풀이 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.like1.vn team, along with other related topics such as: 스도쿠 문제 풀이 스도쿠 풀이 프로그램, 스도쿠 고급 공식, 스도쿠 중급문제, 스도쿠 풀이 사이트, 스도쿠 중급문제와 답, 스도쿠 최고급, 스도쿠 고급 문제, 스도쿠 고급 PDF
Table of Contents
스아리의 잡동사니 :: 스도쿠 풀어주는 프로그램
- Article author: gimgyu.tistory.com
- Reviews from users: 18705
Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about 스아리의 잡동사니 :: 스도쿠 풀어주는 프로그램 스도쿠_문제풀이기.exe. 조금 특이한 프로그램을 보았네요^^. 말그대로 스도쿠를 풀어줍니다… 각 칸에 숫자를 입력해 주시고 문제풀기를 클릭 … …
- Most searched keywords: Whether you are looking for 스아리의 잡동사니 :: 스도쿠 풀어주는 프로그램 스도쿠_문제풀이기.exe. 조금 특이한 프로그램을 보았네요^^. 말그대로 스도쿠를 풀어줍니다… 각 칸에 숫자를 입력해 주시고 문제풀기를 클릭 … 스도쿠 풀이기 조금 특이한 프로그램을 보았네요^^ 말그대로 스도쿠를 풀어줍니다… 각 칸에 숫자를 입력해 주시고 문제풀기를 클릭해주시면 바로 풀어줍니다. 출처 : http://www.kippler.com/win/sudoku/
- Table of Contents:
스도쿠 풀이 기법 가이드 : 네이버 블로그
- Article author: m.blog.naver.com
- Reviews from users: 47759
Ratings
- Top rated: 4.0
- Lowest rated: 1
- Summary of article content: Articles about 스도쿠 풀이 기법 가이드 : 네이버 블로그 만약 이 규칙이 없다면 공개숫자가 없는 텅빈 사각형도 1~3번 규칙을 만족하는 스도쿠 문제가 되겠죠. 2. 후보숫자. 각 cell에 포함될 수 있는 숫자를 … …
- Most searched keywords: Whether you are looking for 스도쿠 풀이 기법 가이드 : 네이버 블로그 만약 이 규칙이 없다면 공개숫자가 없는 텅빈 사각형도 1~3번 규칙을 만족하는 스도쿠 문제가 되겠죠. 2. 후보숫자. 각 cell에 포함될 수 있는 숫자를 …
- Table of Contents:
카테고리 이동
이 블로그
이론
카테고리 글
카테고리
이 블로그
이론
카테고리 글
행복 바구니
- Article author: blog.daum.net
- Reviews from users: 26268
Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about 행복 바구니 이 문제에서 가장 빈칸이 적은 칸은 맨 가운데 칸입니다. 그리고 없는 숫자는 2,7,8입니다. 그런데 각각 그 왼쪽 칸과 위쪽 칸을 보면 빈칸과 같은 줄과 … …
- Most searched keywords: Whether you are looking for 행복 바구니 이 문제에서 가장 빈칸이 적은 칸은 맨 가운데 칸입니다. 그리고 없는 숫자는 2,7,8입니다. 그런데 각각 그 왼쪽 칸과 위쪽 칸을 보면 빈칸과 같은 줄과 … 인터넷에 보면 스도쿠 풀이들이 많이 올라와있는데, 대부분 처음엔 이해하기 어렵죠? 그런 분들을 위해서 저도 스도쿠 풀이법을 올려보려고 합니다.. (이게 더 이해하기 쉬울거라는건 제 생각일 뿐일까요;; ) *스..지식, 지혜, 정보가 담겨있는나만의 행복 ..행복 바구니
- Table of Contents:

52G :: 스도쿠 문제모음 난이도별 무료 게임
- Article author: 52gram.tistory.com
- Reviews from users: 8014
Ratings
- Top rated: 4.5
- Lowest rated: 1
- Summary of article content: Articles about 52G :: 스도쿠 문제모음 난이도별 무료 게임 한국어를 포함한 20여 개 언어를 지원하며 사이트 접속 후 곧바로 게임을 선택하여 풀이할 수 있는 스도쿠 문제모음 전문 사이트입니다. …
- Most searched keywords: Whether you are looking for 52G :: 스도쿠 문제모음 난이도별 무료 게임 한국어를 포함한 20여 개 언어를 지원하며 사이트 접속 후 곧바로 게임을 선택하여 풀이할 수 있는 스도쿠 문제모음 전문 사이트입니다. 심심할 때나 시간을 보내야 할 때 게임을 하는 분들이 많습니다. 화려하고 웅장한 온라인 게임도 좋지만 때론 단순하고 간편한 클래식 게임을 즐기는 것도 좋은데, 그중 하나가 스도쿠입니다. 스도쿠 어플도 있고..가볍고 쉽게 여러가지 소식을 설명합니다. 🙂
- Table of Contents:
스도쿠 문제 풀이 작성하기 (LiveScript) · Wireframe
- Article author: soooprmx.com
- Reviews from users: 32671
Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about 스도쿠 문제 풀이 작성하기 (LiveScript) · Wireframe 스도쿠 문제풀이에 사용하고자 하는 방식은 일종의 깊이 우선 탐색이다. 각 칸에서 사용가능한 후보 숫자 중 하나를 적용하고 다른 칸으로 이동한다. 이 … …
- Most searched keywords: Whether you are looking for 스도쿠 문제 풀이 작성하기 (LiveScript) · Wireframe 스도쿠 문제풀이에 사용하고자 하는 방식은 일종의 깊이 우선 탐색이다. 각 칸에서 사용가능한 후보 숫자 중 하나를 적용하고 다른 칸으로 이동한다. 이 …
- Table of Contents:
테스트
개선점

[9월의 퍼즐 해설] 대소관계 스도쿠 – 과학의 지평
- Article author: horizon.kias.re.kr
- Reviews from users: 2194
Ratings
- Top rated: 4.7
- Lowest rated: 1
- Summary of article content: Articles about [9월의 퍼즐 해설] 대소관계 스도쿠 – 과학의 지평 이 스도쿠는 위키백과의 스도쿠 항목에 있는 예시를 이용하여 만들었다. 이 예시 문제의 풀이를 가져다가 숫자는 모두 지우고 부등호만 채워 넣었다. …
- Most searched keywords: Whether you are looking for [9월의 퍼즐 해설] 대소관계 스도쿠 – 과학의 지평 이 스도쿠는 위키백과의 스도쿠 항목에 있는 예시를 이용하여 만들었다. 이 예시 문제의 풀이를 가져다가 숫자는 모두 지우고 부등호만 채워 넣었다.
- Table of Contents:
![[9월의 퍼즐 해설] 대소관계 스도쿠 – 과학의 지평](https://horizon.kias.re.kr/wp-content/uploads/2019/08/main-480x270.jpg)
스도쿠를 풀어주는 앱 소개
- Article author: ddmanager.tistory.com
- Reviews from users: 29062
Ratings
- Top rated: 4.7
- Lowest rated: 1
- Summary of article content: Articles about 스도쿠를 풀어주는 앱 소개 바로… ‘스도쿠 풀이’ 인데요,. 이름 그대로 스도쿠를 풀어주는 앱이예요. Sudoku.apk … (이 문제는 제 폰에 설치된 스도쿠 문제 앱에 있는. 문제중 하나예요). …
- Most searched keywords: Whether you are looking for 스도쿠를 풀어주는 앱 소개 바로… ‘스도쿠 풀이’ 인데요,. 이름 그대로 스도쿠를 풀어주는 앱이예요. Sudoku.apk … (이 문제는 제 폰에 설치된 스도쿠 문제 앱에 있는. 문제중 하나예요). 안녕하세요 ^^ 이번에도 제가 만든 앱 하나를 소개하려고 해요 바로… ‘스도쿠 풀이’ 인데요, 이름 그대로 스도쿠를 풀어주는 앱이예요 스도쿠란, 9×9 칸에 가로, 세로에 1~9까지의 숫자가 중복되어서는 안되고,..18학번 컴소공 학생의 블로그 입니다~! >_<
- Table of Contents:
스도쿠를 풀어주는 앱 소개
티스토리툴바
See more articles in the same category here: https://toplist.like1.vn/blog.
스도쿠 풀이 기법 가이드
1. 스도쿠란?
위와 같이
1) 각 가로줄에는 1~9까지의 숫자가 겹치지 않도록 한번씩 들어간다.
2) 각 세로줄에는 1~9까지의 숫자가 겹치지 않도록 한번씩 들어간다.
3) 각 3×3 box 안에는 1~9까지의 숫자가 겹치지 않도록 한번씩 들어간다.
이 3가지의 규칙을 만족하도록 숫자를 채워 넣는 퍼즐입니다.
많은 경우 여기에 4번 규칙 ‘답은 유일하다’ 를 추가하기도 하는데요,
만약 이 규칙이 없다면 공개숫자가 없는 텅빈 사각형도 1~3번 규칙을 만족하는 스도쿠 문제가 되겠죠.
2. 후보숫자
각 cell에 포함될 수 있는 숫자를 모두 적어 놓은 것을 후보숫자라 합니다.
예를 들어, 이 상황에서 맨 왼쪽 위 칸에 포함될 수 있는 숫자는 6, 8, 9 뿐입니다.
다른 숫자가 들어가게 된다면 스도쿠의 기본 규칙 1~3에 위배됩니다.
이럴 경우에 6, 8, 9 를 작은 크기로 적어줍니다.
3. 풀이법의 비교
1) 후보숫자를 사용하지 않는 경우
자동으로 후보숫자를 입력시켜주는 프로그램을 사용하지 않는 이상, 귀찮아서라도 처음에는 이 방법으로 시작을 하게 되지요. 후보숫자를 사용하지 않는다면 고급 기법에 여러가지 제약이 걸리게 됩니다. 즉, 문제의 난이도가 어느 정도 있을 경우, 논리적으로 풀지 못하고 ‘찍어서’ 풀어야 하는 경우가 종종 생기게 된다는 뜻입니다. 다만, 논리적으로 푸는 것보다 빨리 푸는 것이 목적이라면 후보숫자를 사용하지 않는 경우가 훨씬 더 좋은 기록을 낼 수 있습니다.
2) 후보숫자를 사용하는 경우
뭐 위와 반대겠죠. ‘거의’ 모든문제를 논리적으로 풀 수 있지만 (풀이법이 보이기만 한다면야.) 기록면에서는 많이 늦어집니다.
4. 유의사항
* 풀이기법에서는 후보숫자를 사용하지 않고도 찾은 수 있는 풀이기법까지 한해서는 두 가지 방법 모두 넣어서 비교해보도록 해보겠습니다.
* 헷갈리는 분이 계실지도 모르겠는데 행(row)은 가로줄이고요, 열(column)이 세로줄입니다. 또한 box라 하면 3×3 짜리 작은 네모칸을 말합니다.
* 앞으로 (m, n) cell 라 하면 위에서부터 m번째 행, 왼쪽에서부터 n번째 열에 위치한 cell을 가르킵니다.
* 풀이 기법에 대한 질문이나 코멘트는 공개댓글로(비댓이어도 상관은 없습니다만, 의견은 공유하는게 좋을듯해요), 연습문제에 대한 풀이나 질문은 비밀댓글로 달아주세요. 스포일러가 될 수 있습니다.
* 궁금한 점이 있는 경우 각 게시글에 댓글을 다시면 됩니다. 단, 스도쿠라는 퍼즐의 특성상 그림이 필요할 때가 있는데, 이 경우는 블로그 우측 상단의 메모게시판을 이용해주세요. 풀이법에 대한 질문이나, 막히는 문제의 힌트 등 스도쿠에 대한 전반적인 내용이면 모두 가능합니다.
* ‘이 문제의 답좀 구해주세요’와 같은 질문은 안받습니다. 모든 문제는 찍으면 다 풀리니, 무의미한 질문입니다.(가끔 뜬금포 쪽지가 와요 ㄷㄷ;;) 단, 막히는 문제를 질문하시면 그 상황에서 어떤 기법을 적용시킬 수 있는지 힌트는 드릴 수 있습니다.
5. 테크트리
그냥 처음부터 쭉 읽으시면 이해하시는데에 큰 지장이 없을 겁니다.
다만 특정 기법을 먼저 마스터하고 싶다 하시는 분은 아래의 테크트리를 참고해서 이해해 나가시면 되겠습니다.
행복 바구니
인터넷에 보면 스도쿠 풀이들이 많이 올라와있는데, 대부분 처음엔 이해하기 어렵죠?
그런 분들을 위해서 저도 스도쿠 풀이법을 올려보려고 합니다..
(이게 더 이해하기 쉬울거라는건 제 생각일 뿐일까요;; )
*스도쿠의 규칙은?
스도쿠는 9X9짜리 칸을 정사각형 9개(3X3)로 나누고, 그 안에 들어있는 기본적인 숫자를 바탕으로 해서 1부터 9까지의 숫자로 칸을 채워나가는 퍼즐입니다. 숫자를 채울 때에는 가로, 세로 줄에 겹치는 수가 없어야 하며, 또한 3X3짜리 정사각형 칸 안에도 겹치는 수가 없어야 합니다.
그러면 이제부터 풀어볼까요 ~ 풀어볼 문제는 2007년 7월 20일자 스도쿠 입니다.
(스도쿠 문제들은 http://www.dailysudoku.com 에서 날마다 얻으실 수 있습니다^^)
물론 문제를 풀기 위해서는 스도쿠의 기본 규칙을 잘 알아야겠죠~^^(그건 기본이죠)
그리고 숫자들의 배치를 포괄적으로 파악할 수 있는 능력 또한 아주 중요합니다.
그렇지만 그것만으로는 스도쿠를 푸는데 아주 많은 시간이 걸리게됩니다.
*박스: 3X3짜리 정사각형, 칸: 1X1짜리 정사각형을 말합니다.
ⓛ가장 빈칸이 적은 칸에 존재하지 않는 숫자들을 파악하고, 주위를 둘러보자.
이 문제에서 가장 빈칸이 적은 칸은 맨 가운데 칸입니다. 그리고 없는 숫자는 2,7,8입니다. 그런데 각각 그 왼쪽 칸과 위쪽 칸을 보면 빈칸과 같은 줄과 칸에 8이 있는 것을 알 수 있습니다. 따라서 맨 위쪽의 빈 칸 외에 다른 칸에는 8이 금지됩니다.(*들어갈 수 없다라는 말을 금지되었다고 하겠습니다.) 그러면 맨 위의 칸에는 8이 들어가게 됩니다.
그 후에 오른쪽 칸을 보면 역시나 없는 수 중 하나인 2가 있습니다. 그래서 위에서 2번째 칸에는 2가 들어가게 됩니다.
이러고 나면 빈 칸이 하나 뿐이므로, 마지막 빈칸에는 7이 들어가게 됩니다.
/이 단계를 마치면..
(2)기본 규칙(세로줄, 가로줄, 3X3 박스에는 같은 수가 없어야 한다.)에 따라 찾기.
이 방법은 역시나 숫자들의 배치를 파악하는 것이 중요합니다. 물론 특정 숫자에 대해 금지된 칸을 찾기 위해 처음에는 X표를 해가면서 하셔도 됩니다. 그러나 나중에 그게 귀찮아 지시면 한 박스마다 눈으로 보고 하시면 훨씬 더 편리합니다.
(따라하기~)
맨 아래 가장 왼쪽 박스를 보시고, 옆에 있는 숫자 ‘1’들로 부터 세로로 길게 줄이 그어져있다고 생각하세요.(그 가상의 줄을 저는 ‘금지줄’ 이라고 부릅니다.) 그 때, 색이 칠해지지 않은 칸이 하나만 있을 경우 그 칸에는 숫자 1이 들어가게 됩니다.
1) 맨 위줄 중간 박스에서, 맨 위 가장 왼쪽 칸을 뺀 나머지 칸에는 5가 금지됩니다.(밑에 있는 박스들을 보세요.) -> 따라서 맨 위줄 중간 박스의 맨 위 가장 왼쪽 칸에는 5가 들어갑니다.
같은 식으로 최대한 찾을 수 있는만큼 숫자들을 찾아줍니다.
/ 이 단계를 마치면…
③숫자가 어디에 들어갈지 불확실해도 그 숫자가 들어갈 수 있는 칸이 한 직선위에 있으면 그 숫자와 같은 효력이 있다.
이게 무슨 말이냐구요;; 살펴봅시다~
이 방법은 어떤 한 줄 (이어져있는 박스 3개)에 어떤 숫자가 단 하나만 존재할 때에 효과가 있습니다.(물론 상황따라 다르지만.. 그래도 꽤 유용한 방법이니 알아두세요~)
이 문제에서 그 방법을 사용할 수 있는 칸은 맨 위 가운데 칸입니다.
맨 윗줄(가로)과 가운데 줄(세로)이 4가 금지되어 있는것을 보실 수 있습니다
<4?> 가 있는 곳을 잘 살펴보세요.
여기에서는 둘 중 한 칸에 4가 들어가게 됩니다.
생각해 보시면 둘 중 어느칸에 4가 들어가든 그 세로줄에는 4가 들어갈 수 없다는 말이 됩니다.
거기에다가 기본 원리를 생각해 보면 맨 아래줄(가로) 가운데 박스에서 맨 아래쪽 왼쪽 칸에 4가 들어가게 됩니다.
그런데 이 문제에서는 아직까지 이 방법을 쓸 수 있는 곳 수가 이것밖에 없군요;
/이 단계를 마치면/
(4)세로줄, 가로줄과 주위 숫자들을 사용해서 숫자를 찾는 방법. (약간 2번하고 겹치는 듯..)
예를 들어서 이 줄을 살펴봅시다.
이 줄에 없는 숫자는 3,6,7 입니다.
그런데 진하게 칠해진 곳을 봐주세요~ 3과 7 모두 금지가 되어있습니다.
그러면 그 칸에 들어갈 숫자는 6이 되겠지요^^
그리고 이 문제에서는 사용할 수 없지만 만약 그 칸 왼쪽의 빈칸 2개에서 세로줄을 그었을 때 줄 안에 3 또는 7이 있다면 그 중 한칸에 특정 숫자(3이나 7)가 금지되기 때문에 그 줄을 완전히 채울 수 있답니다^^
또한 3×3박스 안에서도 이와같은 방법을 사용할 수 있습니다.
[박스 안에서와 세로줄, 가로줄에 들어가있지 않은 숫자 중에서 하나 (a라는 숫자라고 하면) 를 제외한 모든 숫자가 금지된 칸이 하나 존재한다면 그 칸에는 a라는 숫자가 들어가게 된다. ] 라고 정리할 수 있겠죠^^*주의사항: 박스에서나 세로줄, 가로줄에서나 들어가지 못한 숫자가 적은 것에서부터 이 방법을 적용시켜주시기 바랍니다~
그렇지만 들어가지 못한 숫자가 4개정도 되는 경우까지는 이 방법을 써먹을 수는 있습니다.
이런 식으로 해서 (몇 가지 경우가 더 있습니다.) 이 단계를 마치면..//
이제 이런 방법을 계속 혼합해서 사용해 주시면 됩니다.
또한, 이 방법들의 사용 순서는 문제 풀이와는 전혀 상관이 없답 니다~
정답입니다^^
*주의사항
스도쿠의 정답은 반드시 1개가 아닐 수도 있습니다. 특히 빈칸이 많을수록 더더욱 그렇습니다!
——————————————————————————————–
물론 정답은 있습니다;; 그러나 제가 직접 푼건 아래에서 2번째 그림까지구요..
그 후 학원에서 자습시간에 열심히 스도쿠를 풀었습니다만;;
숫자 몇개를 더 찾은 후 더 이상 숫자가 보이지 않자 ‘찍기’모드로 돌입..
그리고 나서 스도쿠가 거의 다 풀리는 듯 싶었죠;;
그런데 칸이 3개 정도 남았는데 숫자가 안맞는 상황이 발생했죠
그래서 저는 스트레스를 해소를 위해서..!! 스도쿠 종이를 북~북~ 찢었다는 ~-_-
이런 글 쓸려면 쉬운걸 골랐어야 했는데 왜 “very hard”를 골라가지고 왠 망신이람~
——————————————————————————————-
여기까지였습니다
———————————————-
새롭게 발견한 풀이 방법
얼마전 스도쿠를 풀다가 얼핏 새로운 방법을 한가지 더 알게되었습니다^^
위의 ③번의 변형이라고도 할 수 있을것 같군요..
이 그림을 보시면..
빨간색 테두리가 쳐진 줄에서 1이 들어갈 수 있는 칸은
한개의 큰 네모칸 안에 있는 작은 네모칸 2개 뿐입니다.
(그러니까 그 줄에서 다른 큰 네모칸 (두꺼운 검정 테두리) 안에 있는
칸들에 1이라는 숫자가 이런저런 이유로 모두 들어갈 수 없게 되었습니다..!!)
그런데 1?라고 써진 곳을 봐주세요.~
같은 줄의 밑에 있는 모든 칸들에 1이 막혀버렸기 때문에, 어쩔수 없이 그 두 칸 중 한 칸에는 반드시 1이 들어가야 합니다.
그런데 그러면 맨 위의 가장 왼쪽에 있는 가장 큰 네모칸 (1?이 있는 곳)에는 반드시 1이 들어가야 합니다.
결과적으로, 스도쿠 규칙에 위배되지 않으면서 이 두 조건을 동시에 만족시키려면 1은 반드시 1?가 쓰여있는 두 칸에만 들어갈 수 있게 되는 것입니다.
(아시겠나요???)
또, 그로부터 유추해 낼 수 있는것은,
그 큰 네모칸에서 1?가 있는 두 칸을 뺀 나머지 칸에서 1이 자동적으로 들어갈 수 없게 된다는 것입니다^^
(이 그림에서 진한 빨강색 칸에는 자동적으로 1이 금지됩니다.)
정리해서, 위의 ③번은 큰 네모칸의 나머지 칸들이 막혀서 그 칸을 지나가는 어떤 줄에 특정 숫자가 들어갈 수 없는것이고,
방금 소개한 방법은 어떤 한 줄의 나머지 칸들이 막혀서 그 줄이 지나가는 큰 네모칸에 특정 숫자가 들어갈 수 없게되는것…
생각해보면 상당히 비슷한 방법이죠^^
그런데 이 방법이 또 흥미로운 것은,
1? (즉, 특정 숫자가 허용되는 칸을 이은 줄) 가 한 큰 네모칸 안에서 1칸의 교점이 생기도록 만들어 지는 경우가 있습니다.
예를들어 +, ㄱ, ㄴ 자 모양 등등으로 말이죠..
이 경우, 무조건 그 교점에다가 1 (특정 숫자)이라는 숫자를 쓰시면 됩니다.
원리는 스도쿠 규칙을 잘 생각해 보시면 됩니다^^
그러면 유용하게 활용하세요~
스도쿠 문제 풀이 작성하기 (LiveScript) · Wireframe
스도쿠 문제를 풀어주는 프로그램을 만들어보자. 스도쿠 풀이 방법은 여러 접근법이 있지만, 여기서는 가장 간단하게 임의의 한 빈칸에서 출발해서 ‘쓸 수 있는 숫자 후보’들을 하나씩 넣으면서 다음 빈칸으로 이동하는 식으로 진행한다. 여기서 사용할 언어는 Livescript이다.
노드
스도쿠 문제풀이에 사용하고자 하는 방식은 일종의 깊이 우선 탐색이다. 각 칸에서 사용가능한 후보 숫자 중 하나를 적용하고 다른 칸으로 이동한다. 이 때 적용할 수 있는 후보 숫자가 없으면 어딘가 잘못된 것이므로 이전 노드에서 다른 후보 값을 사용하고 재탐색한다.
또한 노드는 1)처음부터 값이 주어진 칸, 2)공란, 3)문제를 푸는 과정에서 값을 쓴 칸으로 구분하게 되는데 이는 ‘색’이라는 속성으로 사용하도록 하겠다. 또 한가지 중요한 것은 노드는 자신의 위치(인덱스)도 저장해야 한다는 점이다. 이를 바탕으로 각 칸을 표현할 노드 클래스를 아래와 같이 정의한다.
class Node (@value, @order) -> @color = if @value == 0 then \white else \black
유틸리티 함수
스도쿠 문제를 푸는 과정에서의 핵심은 특정한 칸의 위치에서 사용할 수 있는 후보 숫자들을 뽑아내는 것인데 이는 1~9의 숫자에서 다음에 해당되는 숫자를 뺀 나머지가 된다.
같은 세로 줄에 있는 숫자
같은 가로 줄에 있는 숫자
같은 3X3 격자에 있는 숫자
따라서 다음과 같은 유틸리티 함수를 만들어야 한다.
인덱스로 좌표(x, y)를 산출하는 함수
인덱스로 zone 값을 구하는 함수
특정 zone 내의 칸의 인덱스들을 구하는 함수
특정 인덱스와 같은 열의 인덱스를 구하는 함수
특정 인덱스와 같은 행의 인덱스를 구하는 함수
인덱스를 좌표로 변환
인덱스를 좌표로 변환하는 것은 간단하다. 스도쿠는 9×9 영역에서 이루어지는 게임이므로 인덱스값 i를 9로 나눈 몫이 행이되고, 9로 나눈 나머지가 열이 된다.
i2c = (i) -> [i % 9, Math.floor i / 9]
인덱스를 zone으로 변환
인덱스를 좌표로 변환하고 나면, zone을 구하는 것도 간단하다. zone은 다음과 같이 위치한다고 할 때,
0 1 2 3 4 5 6 7 8
y 값을 3으로 나눈 몫이 행의 위치가 되고, x 값을 3으로 나눈 나머지가 열의 위치가 된다. 따라서 아래와 같은 코드로 zone의 번호를 구할 수 있다.
zone = (i) -> [x, y] = i2c i (Math.floor y / 3) * 3 + (Math.floor x / 3)
인덱스와 동일한 zone에 속한 인덱스 구하기
반대로 zone의 번호를 가지고 해당 zone의 모든 인덱스를 구하는 방법을 생각해보자. 이는 각 zone의 가장 앞 인덱스를 구할 수 있다면 그 위치로부터 가로, 세로로 3개의 9개 인덱스 값을 얻으면 된다.
zone의 첫 칸의 위치는 zone 번호를 z라 할 때 다음과 같이 계산된다.
y : zone의 행 * 27
x : zone의 열 * 3
따라서 i 와 같은 zone에 위치한 인덱스들은 다음과 같이 계산한다.
in-zone = (i) -> z = zone i zi = (z % 3) * 3 + (Math.floor z / 3) * 27 [za + m * 9 for m in [0 til 2]].map -> [it + n for n in [0 til 2]] .reduce (++), []
차집합 계산
그리고 후보숫자를 찾기 위해서 두 배열의 차집합을 구하는 함수를 하나 작성한다.
sub = (xs, ys) -> [x for x in xs when x not in ys]
이제, 필요한 유틸리티 함수들은 준비되었으니, 스도쿠 게임을 풀어보자.
스도쿠 게임 클래스
스도쿠 게임 클래스를 작성할 차례이다. 이 클래스는 크게 세가지 기능을 갖는데,
주어진 일련의 문자열로부터 81개의 숫자를 읽어들여서 스도쿠 판을 구성한다. 이 판은 Node들의 배열이다. 스도쿠 문제를 푼다. 결과를 출력한다.
그리고 문제를 푸는 과정에서 특정 위치에서 가용한 후보 숫자를 뽑아내는 메소드도 하나 있어야 한다.
입력값 파싱하여 스도쿠판 생성
먼저 주어진 문자열 데이터로 스도쿠 판을 구성하는 부분을 살펴보자.
class Sudoku (str-data) -> @data = str-data.split ” .map (c, i) -> new Node (parseInt c), i
특정 위치의 가용한 값 찾기
특정 위치 i에서 가용한 숫자를 찾는 메소드를 작성한다. 가용한 숫자는 아래 세 개 집합을 먼저 구해야 한다.
ar : i와 동일한 행에 있는 값들
ac : i와 동일한 열에 있는 값들
az : i와 동일한 zone에 있는 숫자들
이 세 배열을 합친 후 1~9에서 빼면 가용한 숫자가 나오게 된다. 이미 유틸리티 함수들을 작성해두었으므로 이 부분도 간단하다.
avaiables: (i) -> [x, y] = i2c i ar = [0 til 9].map (e) ~> @data[9 * y + e].value ac = [0 til 9].map (e) ~> @data[9 * e + x].value az = in-zone i .map (e) ~> @data[e].value sub [1 to 9], ar++ac++az
문제 풀기
최종적으로 게임을 푸는 로직이다. 이는 재귀적으로 동작하는데
임의의 흰색 칸을 고른다. 만약 흰 칸이 남아있지 않다면 게임을 완료한 것이므로 true를 리턴한다. 만약 가용한 숫자가 없으면 false를 리턴한다. 가용한 숫자가 있다면 그 중 하나를 현재 칸에 쓰고 현재 칸의 색을 회색으로 바꾼다. 그리고 다음 흰 칸으로 넘어간다. 다음 칸이 false를 리턴했다면 다음 가용숫자를 사용해본다. 남은 가용숫자가 없다면 false를 리턴한다.
이런 식으로 돌아간다. 따라서 최종적으로 true가 리턴되면 게임이 풀린 것이고, false가 리턴된다면 문제가 잘못되어 풀 수 없다는 뜻이다.
run: -> nv = @data.filter (.color == \white) if nv.length == 0 then return yes cv = nv[0] for a in @avaiables cv.order cv <<< color:\gray, value:a if @run! then return yes cv <<< color:\white, value:0 no 결과 출력 최종적으로 결과를 9×9 격자모양으로 생성하는 메소드를 하나 추가한다. 한 행씩 구분자를 이용해서 문자열로 만든다음, 각 행을 역시 구분자로 엮어주면 된다. description: -> [0 til 9].map (r) ~> [0 til 9].map (c) ~> @data[c + r * 9].value.to-string! .join ‘|’ .join ‘
‘ + ‘-‘ * 17 + ‘
‘
테스트
오일러프로젝트에서 가져온 예시 데이터를 이용해서 한 번 실행해보도록 하자.
a = new Sudoku \003020600900305001001806400008102900700000008006708200002609500800203009005010300 a.run! a.description! |> console.log
결과는 다음과 같다.
4|8|3|9|2|1|6|5|7 —————– 9|6|7|3|4|5|8|2|1 —————– 2|5|1|8|7|6|4|9|3 —————– 5|4|8|1|3|2|9|7|6 —————– 7|2|9|5|6|4|1|3|8 —————– 1|3|6|7|9|8|2|4|5 —————– 3|7|2|6|8|9|5|1|4 —————– 8|1|4|2|5|3|7|6|9 —————– 6|9|5|4|1|7|3|8|2
개선점
아무래도 첫 시작 부분에서 영 좋지 못한 선택을 하면 dead end를 확인하는데 까지 많은 비용이 소요된다. 그리고 스도쿠는 올바른 값을 채워나갈수록 문제가 점점 더 단순해지므로 다음 방법을 적용하면 문제를 푸는 속도를 개선할 수 있다.
문제가 항상 풀린다는 가정하에, 최초 주어진 값을 기준으로 가용한 숫자가 1개 밖에 없다면 이 노드들도 해당 값을 적용해서 검은칸으로 만든다. 그리고 새로 추가된 칸의 숫자 덕분에 답이 결정되는 다른 칸들이 나올 수 있다. 이렇게 제약조건을 계속 전파해나가면 빈칸의 수를 줄여서 속도가 개선된다. 흰색 칸 중에서 가용한 숫자의 개수가 적은 쪽을 먼저 선택하면 dead end든 올바른 정답이든 만날 수 있는 확룰이 커진다.
전체 소스코드는 다음과 같다.
Share this: 트위터
이것이 좋아요: 좋아하기 가져오는 중…
So you have finished reading the 스도쿠 문제 풀이 topic article, if you find this article useful, please share it. Thank you very much. See more: 스도쿠 풀이 프로그램, 스도쿠 고급 공식, 스도쿠 중급문제, 스도쿠 풀이 사이트, 스도쿠 중급문제와 답, 스도쿠 최고급, 스도쿠 고급 문제, 스도쿠 고급 PDF