[プログラマー]友達4ブロック
質問する
同じ形のカカファインダーブロックが2×2の形で貼られていると、消えて点数を取るゲームです.
入力フォーマット
m
幅n
とボードのレイアウト情報board
が入力されます.n
, m
<= 30 board
は、長さn
の文字列m
からなる.ブロックを表す文字は大文字AでZを使用します.出力フォーマット
指定したレイアウト情報を入力し、消去するブロックを出力します.
コード#コード#
from copy import deepcopy
def solution(m, n, board):
answer = 0
board = [ list(x) for x in board]
while True:
# 블록 제거
num = pop(m, n, board)
if num == 0: # 더이상 제거할 칸이 없는 경우
break
answer += num
# 밑으로 이동
moveDown(m, n, board)
return answer
def pop(m, n, board):
status = [[0] * n for _ in range(m)]
for i in range(m-1):
for j in range(n-1):
if board[i][j] != '-' and board[i][j] == board[i+1][j] and board[i][j] == board[i][j+1] and board[i][j] == board[i+1][j+1]:
status[i][j]=status[i+1][j]=status[i][j+1]=status[i+1][j+1] = -1
result = 0
for i in range(m):
for j in range(n):
if status[i][j] < 0:
result += 1
board[i][j] = "-"
return result
def moveDown(m, n, board):
for j in range(n):
row = m-1
for i in range(m-1,-1,-1):
if board[i][j] != '-':
if row != i:
board[row][j] = board[i][j]
board[i][j] = '-'
row -= 1
Reference
この問題について([プログラマー]友達4ブロック), 我々は、より多くの情報をここで見つけました https://velog.io/@haman/프로그래머스-프렌즈-4블록テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol