<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=EightQueenProblem%2FLeonardong</id>
	<title>EightQueenProblem/Leonardong - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=EightQueenProblem%2FLeonardong"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=EightQueenProblem/Leonardong&amp;action=history"/>
	<updated>2026-05-14T17:03:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=EightQueenProblem/Leonardong&amp;diff=31511&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=EightQueenProblem/Leonardong&amp;diff=31511&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Debugging]]을 준비하다가 DebugJournal을 적으려고 풀어 본 문제&lt;br /&gt;
----&lt;br /&gt;
 import math&lt;br /&gt;
 class EightQueen:&lt;br /&gt;
     def __init__(self):&lt;br /&gt;
         self.board = None&lt;br /&gt;
         self.positions = []&lt;br /&gt;
     def makeChessBoard(self, aSize):&lt;br /&gt;
         self.board = []&lt;br /&gt;
         for i in range( aSize ):&lt;br /&gt;
             self.board.append([0]*aSize)&lt;br /&gt;
     def setQueen(self, aRow, aCol):&lt;br /&gt;
         self.board[aRow][aCol] = 1&lt;br /&gt;
         self.positions.append((aRow, aCol))&lt;br /&gt;
     def isPositionValid(self, aRow, aCol):&lt;br /&gt;
         for p in self.positions:&lt;br /&gt;
             if p[1] == aCol or p[0] == aRow or \&lt;br /&gt;
                math.fabs(aRow - p[0]) == math.fabs(aCol - p[1]):&lt;br /&gt;
                 return False&lt;br /&gt;
         return True&lt;br /&gt;
     def popLastPosition(self):&lt;br /&gt;
         if len(self.positions) &amp;amp;gt; 0:&lt;br /&gt;
             row, col = self.positions.pop()&lt;br /&gt;
             self.board[row][col] = 0&lt;br /&gt;
             return row, col&lt;br /&gt;
     def findNext(self, aRow, aCol):&lt;br /&gt;
         if aCol &amp;amp;gt;= len(self.board):&lt;br /&gt;
             aRow, aCol = self.popLastPosition()&lt;br /&gt;
         elif self.isPositionValid(aRow, aCol):&lt;br /&gt;
             return aRow, aCol&lt;br /&gt;
         return self.findNext(aRow, aCol+1)&lt;br /&gt;
             &lt;br /&gt;
     &lt;br /&gt;
     def run(self, aSize):&lt;br /&gt;
         self.makeChessBoard(aSize)&lt;br /&gt;
         for row in range(aSize/2):&lt;br /&gt;
             col = 0&lt;br /&gt;
             while row &amp;amp;lt; aSize:&lt;br /&gt;
                 row, col = self.findNext(row, col)&lt;br /&gt;
                 self.setQueen(row, col)&lt;br /&gt;
                 row = row + 1&lt;br /&gt;
                 col = 0&lt;br /&gt;
                 if len(self.positions) &amp;amp;gt;= aSize:&lt;br /&gt;
                     self.showBoard()&lt;br /&gt;
     &lt;br /&gt;
     def showBoard(self):&lt;br /&gt;
         print&lt;br /&gt;
         for b in self.board:&lt;br /&gt;
             print b&lt;br /&gt;
             &lt;br /&gt;
                 &lt;br /&gt;
 #########################################################################&lt;br /&gt;
             &lt;br /&gt;
 import unittest&lt;br /&gt;
 &lt;br /&gt;
 class EightQueenTestCase(unittest.TestCase):&lt;br /&gt;
     def defaultQueen(self):&lt;br /&gt;
         q = EightQueen()&lt;br /&gt;
         size = 8&lt;br /&gt;
         q.makeChessBoard(size)&lt;br /&gt;
         return q&lt;br /&gt;
 ##    def testMakeChessBoard(self):&lt;br /&gt;
 ##        q = self.defaultQueen()&lt;br /&gt;
 ##        self.assertEqual(len(q.board), size)&lt;br /&gt;
     def testSetQueen(self):&lt;br /&gt;
         q = self.defaultQueen()&lt;br /&gt;
         row, col = 0, 0&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         self.assertEqual(q.board[row][col], 1)&lt;br /&gt;
         self.assertEqual(len(q.positions), 1)&lt;br /&gt;
     def testIsPositionValid(self):&lt;br /&gt;
         q = self.defaultQueen()&lt;br /&gt;
         row, col = 3, 3&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         ## valid&lt;br /&gt;
         row, col = 1, 2&lt;br /&gt;
         vaild = q.isPositionValid(row, col)&lt;br /&gt;
         self.assertEqual(vaild, True)&lt;br /&gt;
         ## invalid&lt;br /&gt;
         row, col = 3, 7&lt;br /&gt;
         vaild = q.isPositionValid(row, col)&lt;br /&gt;
         self.assertEqual(vaild, False)&lt;br /&gt;
         row, col = 4, 3&lt;br /&gt;
         vaild = q.isPositionValid(row, col)&lt;br /&gt;
         self.assertEqual(vaild, False)&lt;br /&gt;
         row, col = 5, 5&lt;br /&gt;
         vaild = q.isPositionValid(row, col)&lt;br /&gt;
         self.assertEqual(vaild, False)&lt;br /&gt;
         row, col = 1, 1&lt;br /&gt;
         vaild = q.isPositionValid(row, col)&lt;br /&gt;
         self.assertEqual(vaild, False)&lt;br /&gt;
         row, col = 5, 1&lt;br /&gt;
         vaild = q.isPositionValid(row, col)&lt;br /&gt;
         self.assertEqual(vaild, False)&lt;br /&gt;
 &lt;br /&gt;
     def testPopLastPosition(self):&lt;br /&gt;
         q = self.defaultQueen()&lt;br /&gt;
         row, col = 0, 0&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         row, col = 1, 2&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         row, col = q.popLastPosition()&lt;br /&gt;
         self.assertEqual(len(q.positions), 1)&lt;br /&gt;
         self.assertEqual(row, 1)&lt;br /&gt;
         self.assertEqual(col, 2)        &lt;br /&gt;
 &lt;br /&gt;
     def testFindNext(self):&lt;br /&gt;
         q = self.defaultQueen()&lt;br /&gt;
         ## easily&lt;br /&gt;
         row, col = q.findNext(0, 0)&lt;br /&gt;
         self.assertEqual(row, 0)&lt;br /&gt;
         self.assertEqual(col, 0)        &lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 1)&lt;br /&gt;
         self.assertEqual(col, 2)        &lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 2)&lt;br /&gt;
         self.assertEqual(col, 4)&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 3)&lt;br /&gt;
         self.assertEqual(col, 1)&lt;br /&gt;
         q.setQueen(row, col)        &lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 4)&lt;br /&gt;
         self.assertEqual(col, 3)&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         ## go back&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 4)&lt;br /&gt;
         self.assertEqual(col, 7)&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         ## back again&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 3)&lt;br /&gt;
         self.assertEqual(col, 6)&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         ## go foward&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 4)&lt;br /&gt;
         self.assertEqual(col, 1)&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         row, col = q.findNext(row+1,0)&lt;br /&gt;
         self.assertEqual(row, 5)&lt;br /&gt;
         self.assertEqual(col, 3)&lt;br /&gt;
         q.setQueen(row, col)&lt;br /&gt;
         &lt;br /&gt;
     def testRun(self):&lt;br /&gt;
         q = EightQueen()&lt;br /&gt;
         size = 8&lt;br /&gt;
         q.run(8)&lt;br /&gt;
 if __name__ == &amp;#039;__main__&amp;#039;: &lt;br /&gt;
     unittest.main()&lt;br /&gt;
----&lt;br /&gt;
EightQueenProblem&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>