AlgorithmQuiz/MineSweeper/mgenome 몇일 전에 풀어본 문제인데... 내킨김에 올려 봅니다. 다른 분들하고 다르게 일단 전체 맵을 만든 후에 마인을 찾고 마인 주변에 1씩 더해주는 방법을 썼습니다. unittest 부분은 다른 분들이 한 거 그냥 불여 보았습니다. 아직까지는 잘 이해가 안되지만 그냥 배꼈습니다. --[mgenome] 2006-1-26
import unittest def markcount(r, i, j, n, m): r[i][j] = '*' for a in range(i-1, i+2): for b in range(j-1, j+2): if(-1<a<n and -1<b<m and r[a][b]!='*'): # verify index range and '*' r[a][b] = str(int(r[a][b]) + 1) def makematrix(input, n, m): r = list() for i in range(n): r.append([]) for j in range(m): r[i].append('0') #make zero matrix for i in range(n): for j in range(m): if (input[i][j] == '*'): #find '*' markcount(r, i, j, n, m) #count and marking return r def drawmatrix(input, n, m): r = makematrix(input, n, m) merge = [] for i in range(n): merge.append("".join(r[i])) return "\n".join(merge) def main(): inputs = raw_input() [n, m]= inputs.split() matrix = [] while True: inputs = raw_input() if inputs == "": break matrix.append(inputs) print drawmatrix(matrix, int(n), int(m)) class drawmatrixTest(unittest.TestCase): def testExample(self): inp = [ '*...', '....', '.*..', '....', ] expected = "*100\n2210\n1*10\n1110" self.assertEquals(expected, drawmatrix(inp, 4, 4)) if __name__ == '__main__': unittest.main(argv=('','-v')) #main()