[Programmers] P17679 프렌즈4블록
[Programmers] P17679 프렌즈4블록
Question
Language: Python
- 2X2 영역이 같은 문자로 이루어져있는지 확인하는 함수 작성 –> points 배열을 반환한다.
- points 배열에 있는 좌표들을 모두 0 처리 한다(문자 제거), 제거된 수 만큼 answer 증가
- 위에 있는 문자를 내려주는 역할을 하는 함수(아래에 비어있는 경우 아래로 내려준다.)
Solution
#1
def search_for_puzzle(m,n,board):
points=set()
blocks=[]
for i in range(m-1):
for j in range(n-1):
block_type=board[i][j]
#빈칸이면 해당 영역은 검사할 필요가 없다
if block_type==0:
continue
if board[i][j]==block_type and board[i][j+1]==block_type and board[i+1][j]==block_type and board[i+1][j+1]==block_type:
points.add((i,j))
points.add((i,j+1))
points.add((i+1,j))
points.add((i+1,j+1))
return points
#2
def delete_puzzles(points,board):
for row,col in points:
board[row][col]=0
#3
def drop_down(m,n,board):
for i in range(m-2,-1,-1):
for j in range(n):
if board[i][j]==0:
continue
row=i+1
#빈칸이 아닐때 까지 계속 내려준다.
while row < m and board[row][j] ==0:
board[row][j],board[row-1][j]=board[row-1][j],board[row][j]
row+=1
def solution(m, n, board):
answer = 0
board=[list(row) for row in board]
while True:
points=search_for_puzzle(m,n,board)
#더 이상 지울 영역이 없으면 종료한다.
if points==set():
break
answer+=len(points)
delete_puzzles(points,board)
drop_down(m,n,board)
return answer
댓글남기기