E D R , A S I H C RSS

Eight Queen Problem

About Eight Queen Problem


널리 알려진 고전적 체스 퍼즐. 8X8의 체스판 위에 총 8개의 여왕을 배치하는데 서로 공격하지 않아야 한다. (참고로 여왕은 상하좌우 대각선 총 8방향으로 마음대로 -- 장기의 차와 같이 한번에 여러칸을 -- 움직일 수 있다.

Input

이 프로그램은 Input을 요구하지 않는다.

Output

조건을 만족하는 체스판의 배치 상태를 출력한다.


Sample Output

- - Q - - - - -
- - - - Q - - -
- Q - - - - - - 
- - - - - - - Q
Q - - - - - - -
- - - - - - Q -
- - - Q - - - -
- - - - - Q - -

이 문제를 프로그래밍을 해서 풀어보세요. 어느 언어를 사용하든 상관없습니다. 가장 자신있는 언어를 사용하세요. 그리고, 맞는 결과를 구했다면 다음 칸을 채워주세요. 비교적 간단한 문제이지만, 문제를 해결해 나가는 중에 자신의 실력과 사용하는 도구, 프로그래밍 과정, 디자인 방법 등에 대해 생각해 볼 기회가 될 것입니다. 모든 후배들에게 꼭 한번 시도해 볼 것을 권합니다. 이 경험에 대해 스스로 분석해 보고, 남들과 경험을 공유하고 차이를 살피고(AnalyzeMary), 또 토론하면서 아주 많은 것을 배우게 될 것입니다. 어쩌면 이제까지의 프로그래밍 경험에서보다 더 많은 것을 말이죠. 사실 이 실험의 진정한 가치는 문제 자체보다 이 문제가 가능케 하는 자기 관찰/반성과, 타인과의 논의에 있는 것인지도 모릅니다. --김창준

시간을 잴 때에는 Wiki:SandglassProgramming에 소개된 프로그램을 이용하면 편리합니다. 화장실을 다녀온다든가 할 때 필요한 중간 멈춤(pause) 기능도 있습니다.

도전자총개발시간소스라인수(주석제외)사용언어 Source
이준욱 3h:20m 40 lines C EightQueenProblem/이준욱
iCarus 0h:30m 30 lines C EightQueenProblem/lasy0901
이덕준 1h:10m 73 lines C++ EightQueenProblem/이덕준소스
최태호 0h:35m 71 lines C++ EightQueenProblem/최태호소스
최광식 2h:38m 141 lines C++ .
이선호 2h:29m 58 lines C++ EightQueenProblem/이선호
강석천 4h:50m 135 lines (+ 82 line for testcode. total 217 lines) python EightQueenProblem/강석천
강석천 0h:47m 72 lines (+ 58 line for testcode. total 132 lines) python .
임인택 2h:00m 75 lines C++ EightQueenProblem/임인택
이선우 1h:05m 114 lines java EightQueenProblem/이선우
최봉환 2h:30m 71 lines C++ EightQueenProblem/최봉환
이창섭 1h:9m 73 lines C++ EightQueenProblem/이창섭
조영봉 6h:00 일치시도 실패 python
이강성 1h:50 36 lines python EightQueenProblem/이강성
햇병아리 10h:50m 111 lines C EightQueenProblem/햇병아리
kulguy 10h:00m 229 lines java EightQueenProblem/kulguy
김형용 8h:00m 115 lines (+ 63 line for testcode. total 178 lines) python EightQueenProblem/김형용
서상현 2h:18m 62 lines C EightQueenProblem/서상현
강인수 67 lines/ 28 lines C++/python EightQueenProblem/강인수
2003년도 데블스 캠프
민강근 . . . 8queen/민강근
손동일 . . . 8queen/손동일
문원명 . . . 8queen/문원명
강희경 . . . 8queen/강희경
곽세환 . . . 8queen/곽세환
nextream 1h:02m 21 lines Javascript EightQueenProblem/nextream
da_answer 3h:00m 135 lines Delphi EightQueenProblem/da_answer
밥벌레 0h:55m 170 lines Delphi EightQueenProblem/밥벌레
용쟁호투 3h:56m 146 lines Powerbuilder EightQueenProblem/용쟁호투
용쟁호투 2h:10m 177 lines MS-SQL EightQueenProblem/용쟁호투SQL
Leonardong 2h:35m 153 lines python EightQueenProblem/Leonardong
조현태 0h:20m 52 lines C/C++ EightQueenProblem/조현태
조현태 1h:00m 60 lines C/C++ EightQueenProblem/조현태2
정수민 3h:00m 132 lines C++ EightQueenProblem/정수민
안혁준 - 60 lines go EightQueenProblem/안혁준
최다인 1h:28m 67 lines JavaScript EightQueenProblem/최다인
안정원 0h:16m 13 lines Python EightQueenProblem/안정원


참고로, 소요시간이 모두 얼마냐 하는 것이 크게 중요한 것은 아닙니다. 중요한 것은 그 동안 얼마나 가치있는 무엇을(얼마나 더 얼마나 덜) 했냐는 것이죠. 남들보다 시간이 오래 걸리고, 코드가 길어졌다고 슬퍼하십니까? 아닙니다. 오히려 축하드립니다. 당신은 그만큼 큰 배움의 기회를 만난 겁니다. 자신의 프로그램이 다른 사람들의 그것보다 월등하다고 자랑스러워하며, 더 이상 배울 것이 없다고 생각하십니까? 아닙니다. 당신은 자신이 이렇게 훌륭한 해를 구한 것을 남에게 설명해 줄 기회를 찾았습니다. 가르치는 것만큼 큰 배움도 없습니다(이 때 자신이 만든 프로그램 자체를 설명하려고 하는 것보다 자신이 어떤 사고과정과 어떤 프로그래밍 성장 과정을 통해 최종물에 도달했는지를 반추해보고 설명해주는 게 더 좋겠습니다). 또 다른 사람들은 무엇 때문에 자신과 같은 좋은 해를 얻지 못했는지 분석을 할 여유가 있습니다.

만약 위의 칸을 채우셨다면 EightQueenProblem2를 보세요. (절대 문제 풀기 이전에 보면 안됨)

질문 있는 데요. 개발 시간에 문제를 보고 생각한 시간까지 포함되나요?? -- 선호
네. 보통 개발이라고 하면 분석, 디자인, 테스팅, 코딩 모두 포함합니다. 따라서 문제를 보고 풀어봐야지 하고 생각한 시점부터 개발은 시작된 겁니다. 사실 "코딩"의 과정은 전체에서 보면 작은 부분에 지나지 않습니다.
ㅠ.ㅠ 삽질했습니다.; 상하좌우 대각선 8방향을 주위로 한칸 이동할수 있는것이라고 해석을 해서..; 이상한 코드가 나와버렸네요 ㅠ.ㅠ 역시 체스를 몰라도 죄가 되는것인가~~ --인수




오늘의 교훈 : 감기약먹고 프로그래밍하지 말자. --; - 임인택

이런거 종종 하면 제미있겠네요..^^;; -최태호
와.. 참여율 높은데요~ ^^ 열띤 분위기 --석천


옛날 ZP에서 하던 1000bytes 경기 보는 것 같네 허허 _



관련 페이지 개설 의도

제가 EightQueenProblem 일련과 토론 페이지를 열은 의도는 다음과 같습니다.

  • 여러 사람이 함께 할 수 있는 것에 전시회나 강연, 기존의 스터디나 숙제 내주고 검사하기 등 말고도 가치있는 것이 많이 있다는 것을 보여주기 위해
  • 자신의 프로그래밍 과정을 돌아보고(self-reflect), 남들의 그것과 비교해볼 기회 제공을 위해
  • 공동 학습(collaborative/collective learning)을 유도하기 위해
  • 꼭 답을 가르쳐 주거나 교정을 해주는 선생이 없어도 서로 배울 것이 무궁무진하고, 또 많은 것을 배울 수 있다는 것을 체험시켜주기 위해
  • 프로그래밍을 잘한다는 것은 단순히 빠른 시간 안에 짧고 기발한 프로그램을 만들어낸다는 것이 아니라는 것을 인식시켜주기 위해
  • 프로그래밍을 잘하는 사람은 프로그래밍과 사고 과정에 어떤 효율적 체계(system)들을 여러가지 갖고 있다는 것을 알려주기 위해
  • 배운다는 것이 얼마나 흥미진지(exciting)한 것일 수 있는지 느끼게 해주려고
  • 이미 만들어진 종적 상태의 프로그램에서보다 그것을 전혀 모르는 상태에서 직접 축조(construct)해 나가는 과정에서 배우는 것이 훨씬 더 많고, 재미있으며, 효율적인 학습이 된다는 것을 느끼게 해주기 위해
  • 같은 문제의 해법에 다양한 혹은 비슷한 부분들이 존재하며, 거기서 서로 배울 것이 많다는 것을 느낄 기회 제공
  • 별로 대단해 보이지 않는 활동에서 각자 얼마나 많은 것을 배울 수 있는지 직접 테스트해볼 기회 제공을 위해 -- 훌륭한 학습자는 동일한 사건에서 더 많은, 더 깊은 교훈을 얻는다는 것을 알려주기 위해

--김창준


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2014-03-16 01:40:08
Processing time 0.4843 sec