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()
BioHackersNet