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 2021-02-07 05:23:11
Processing time 0.0353 sec