강의에서 numpy같은 라이브러리를 적극 활용하는 것 보고 나도 그래야겠다는 생각이 많이 든다.
이번 문제 역시 천천히 아는데로 풀면 나온다.
import numpy as np
def solution(m, n, board):
s = [list(i) for i in board]
s = np.array(s)
while True:
delete_loc = [] # 더 이상 지울 캐릭터가 없을 때까지 반복
# 조건에 맞아서 지워질 캐릭터 위치 저장
for i in range(m-1):
for j in range(n-1):
if s[i,j] == '_':
continue
if np.all(s[i:i+2, j:j+2] == s[i,j]):
delete_loc.append([i,j])
# 조건에 부합하지 않고 더이상 지울 캐릭터가 없으면 멈춤
if not delete_loc:
break
else:
# 지울 것들을 지워준다
for i, j in delete_loc:
s[i:i+2, j:j+2] = '_'
# 지울꺼 지웠으니 지운것보다 위에 있는 것들을 아래로 내려야함
for _ in range(m):
for j in range(n):
for i in range(1,m):
if s[i,j]=='_':
s[i,j], s[i-1,j] = s[i-1,j], '_'
answer = 0
for k in s.tolist():
answer += k.count('_')
return answer
m = 4
n = 5
board = ["CCBDE", "AAADE", "AAABF", "CCBBF"]
print(solution(m, n, board))