# m: 폭, n: 높이, board(list): 배치 정보
defsolution(m,n,board):answer=0remove_set=set()# 그냥 리스트로 바꿔주자..
foriinrange(m):board[i]=list(board[i])whileTrue:# 4개 블록 찾기 -> 추출해줬다가 remove_set 떔에 걍 안 해줌
foriinrange(m-1):forjinrange(n-1):# 일단 현재 위치가 빈 배열이 아니어야 이 로직이 작동되도록 해야 함
ifnotboard[i][j]:continue# 인접하는 4칸이 같으면
ifboard[i][j]==board[i][j+1]andboard[i][j]==board[i+1][j] \
andboard[i][j]==board[i+1][j+1]:remove_set.add((i,j))remove_set.add((i,j+1))remove_set.add((i+1,j))remove_set.add((i+1,j+1))# 뭐임 이거 땜에 계속 오류 났던 거임???
# 아 여기서 초기화를 해주면 안 되고 계속 가져가야지..
# remove_set = {(i, j), (i, j + 1), (i + 1, j), (i + 1, j + 1)}
# remove_set이 존재한다면(지워줬다면)
ifremove_set:# 몇 개인지 세주고 저장
answer+=len(remove_set)# 위에서 저장해줬으니, 이제 remove_set에 있는 건 다시 초기화
fori,jinremove_set:board[i][j]=[]# remove_set 초기화
remove_set=set()# 존재하지 않는다면
else:returnanswer# 블록 아래로 땡기기
whileTrue:moved=Falseforiinrange(m-1):forjinrange(n):ifboard[i][j]andnotboard[i+1][j]:board[i+1][j]=board[i][j]board[i][j]=[]moved=TrueifmovedisFalse:break# answer: 14
print(solution(4,5,["CCBDE","AAADE","AAABF","CCBBF"]))# answer: 15
print(solution(6,6,["TTTANT","RRFACC","RRRFCC","TRRRAA","TTMMMF","TMMTTJ"]))
Leave a comment