몇일 전에 풀어본 문제인데... 내킨김에 올려 봅니다.

다른 분들하고 다르게 일단 전체 맵을 만든 후에 마인을 찾고 마인 주변에 1씩 더해주는 방법을 썼습니다. unittest 부분은 다른 분들이 한 거 그냥 불여 보았습니다. 아직까지는 잘 이해가 안되지만 그냥 배꼈습니다. --[mgenome] 2006-1-26

   1 import unittest
   2 
   3 def markcount(r, i, j, n, m):
   4     r[i][j] = '*'
   5     for a in range(i-1, i+2):
   6         for b in range(j-1, j+2):
   7             if(-1<a<n and -1<b<m and r[a][b]!='*'): # verify index range and '*'
   8                 r[a][b] = str(int(r[a][b]) + 1)
   9     
  10 def makematrix(input, n, m):
  11     r = list()
  12     for i in range(n):
  13         r.append([])
  14         for j in range(m):
  15             r[i].append('0') #make zero matrix
  16     for i in range(n):
  17         for j in range(m):
  18             if (input[i][j] == '*'): #find '*'
  19                 markcount(r, i, j, n, m) #count and marking
  20     return r
  21 
  22 def drawmatrix(input, n, m):
  23     r = makematrix(input, n, m)
  24     merge = []
  25     for i in range(n):
  26         merge.append("".join(r[i]))
  27     return "\n".join(merge)
  28 
  29 def main():
  30     inputs = raw_input()
  31     [n, m]= inputs.split()
  32     matrix = []
  33     while True:
  34         inputs = raw_input()
  35         if inputs == "": break
  36         matrix.append(inputs)
  37     print drawmatrix(matrix, int(n), int(m))
  38  
  39 class drawmatrixTest(unittest.TestCase):
  40     def testExample(self):
  41         inp = [
  42             '*...',
  43             '....',
  44             '.*..',
  45             '....',
  46         ]
  47         expected = "*100\n2210\n1*10\n1110"
  48     
  49         self.assertEquals(expected, drawmatrix(inp, 4, 4))
  50 
  51 if __name__ == '__main__':
  52     unittest.main(argv=('','-v'))
  53     #main()

AlgorithmQuiz/MineSweeper/mgenome (last edited 2011-08-03 11:00:45 by localhost)

web biohackers.net