문제 링크 ▶︎ 프로그래머스 [1차]프렌즈4블록
이 문제는 집합을 통해 푼 문제이다.
1차원 배열 board 를 2차원 배열로 만들어주고, 2X2 같은 캐릭터 검사를 해서 지워지는 좌표를 집합 s에 저장한다.
이후, 집합의 길이만큼 answer에 추가하고 지워지는 칸을 빈칸으로 만들고 집합을 비운다.
모든 칸을 조사하면서 아랫칸이 빈칸이라면 내려주면서 빈칸을 채워준다.
이걸 지워지는 칸이 없을때까지 while 문으로 반복한다.
def solution(m, n, board):
board = [list(l) for l in board]
answer = 0
s = set()
while True:
for i in range(m-1):
for j in range(n-1):
c = board[i][j]
if c == []:
continue
else:
if c == board[i+1][j] and c == board[i][j+1] and c == board[i+1][j+1]:
s.add((i,j))
s.add((i,j+1))
s.add((i+1,j))
s.add((i+1,j+1))
if s:
answer += len(s)
for i,j in s:
board[i][j] = []
s = set()
else:
break
while True:
turn = 0
for i in range(m-1):
for j in range(n):
if board[i][j] and board[i+1][j] == []:
board[i][j], board[i+1][j] = board[i+1][j], board[i][j]
turn += 1
if turn == 0:
break
return answer
처음에는 어렵게 느껴져서 다른 코드를 참고했는데, 다시 생각해보면 충분히 풀수있었고 풀어야하는 문제라 생각.