현재 구현이 약하다는 걸 느끼게 해준 문제
프렌즈 4블록
같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임
입력으로 블록의 첫 배치가 주어졌을 때, 지워지는 블록은 모두 몇 개인지 판단하는 프로그램을 제작하라.
처음에 4개사각형 되는거 보고 그 주위 같은 글자있으면 더해주기 -> 사각형만 포함해서 안됨 -> 다시 새로 하다가 모르겠어서 다른 사람 거 쪼꿈 봤움
==> 인덱스 저장하고 set 시키기 (이 처리가 막혔었음, extend도 처음 봄)
블록을 지우고 그만큼 내릴 때를 구현하기 힘들 것 같다고 생각함
입력해주는 대로 가로로 배열을 저장하는게 아니라 세로를 기준으로 배열을 저장해주고 각 행들을 뒤집어줌
==> 하나의 배열(블록)을 지우면 자동으로 위에 있던 블록들이 내려오는 효과
def solution(m, n, board):
li = [[] for i in range(n)]
answer = 0
#배열 세로를 기준으로 들어 주기
for i in range(n):
for j in range(m):
board[j] = list(board[j])
li[i].append(board[j][i])
for i in range(n):
li[i] = li[i][::-1]
#개수 세기
while 1:
index = []
for i in range(n):
for j in range(len(li[i])):
try:
if li[i][j] == li[i+1][j] == li[i+1][j+1] == li[i][j+1]:
index.extend([(i,j),(i+1,j),(i,j+1),(i+1,j+1)])
except: continue
# 중복 개수 지우고 블록 터트리기
index = list(set(index))
index.sort()
for i,j in index[::-1]:
del li[i][j]
answer += len(index)
if len(index)==0: break
return answer