본문 바로가기

Studying/Computer Programs

sudoku (스도쿠) 퍼즐 푸는 프로그램 (C언어)

아이패드 앱(의 부가기능) 중에 스도쿠(sudoku) 퍼즐이 있길래 좀 해보다가, 이걸 푸는 프로그램을 C언어로 작성하는 잉여짓을 하게 되었습니다.

기본원리는 그냥 게임의 룰을 반영하여, 모든 빈칸을 채울때까지 반복하는 것이므로 별도의 설명은 필요하지 않을듯 싶고, 다만 문제에 따라서, 숫자를 찍어야(?) 되는 상황이 있는 듯 해서 난수발생함수를 이용하여 이것을 구현하도록 하였습니다.

여기서 만든 건 알고리즘 최적화에 대한 문제가 있을텐데, 전 그런걸 걱정할 수준의 professional programmer가 아니라서 생략하고 순수 노가다를 택했습니다.

 

sudoku.c
다운로드

 

problem1
다운로드

 

problem2
다운로드

 

problem3
다운로드

 

스도쿠 퍼즐 문제를 알려주기 위한 입력 파일은 9행 9열을 가진 텍스트 파일의 형태이며, 숫자를 채워 넣어야 하는 빈칸에는 0이 초기값으로 입력되어 있습니다.

샘플 (problem1)

 

 


 

첨부한 코드의 main 함수는 argc 및 argv 라는 매개변수를 받고 있는데요. 이들을 명령행 인자라 부르며, 터미널 콘솔에서 프로그램을 실행할 때 입력한 옵션 값들이 저장됩니다. 자세한 사항은 다음 포스팅에 소개되어 있습니다.

 

 

Command-line arguments (C/C++ 명령행 인자)

C++를 배우기 위해 책을 보는데, command-line arguments 즉 명령행 인자에 대한 내용이 있었습니다. 메인함수를 특별한 방법으로 정의해서, 프로그램을 실행시킬때 커맨드 라인에서 옵션을 지정해줄

swstar.tistory.com

 

또한 malloc 함수를 이용하여 동적으로 메모리를 할당하고 있는데, 이 기능에 대한 것은 다음 포스팅에 소개되어 있습니다.

 

 

C언어의 malloc 함수

학부때부터 수치계산 할때면 항상 C언어를 써 왔지만, 배열과 포인터의 등가관계에 대해서는 극히 최근에야 알게 되었습니다. 예를 들어서, 1) double a[10]; 을 선언했다면, 배열의 이름 a는 포인터

swstar.tistory.com

 

C++ 의 클래스를 이용하면 스도쿠 퍼즐을 푸는 객체를 만들수도 있으며, 자세한 사항은 다음 포스팅을 참고하면 좋습니다.

 

 

sudoku 퍼즐 푸는 프로그램 (C++)

예전에 포스팅했던 수도쿠 퍼즐 푸는 프로그램에 이어서, C++ 로 재구성한 코드입니다.

swstar.tistory.com