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()
web biohackers.net