게임 요구 사항을 구현해보는 문제입니다.
같은 모양의 카카오프렌즈 블록이 2x2 형태로 4개가 붙어있을 경우
사라지면서 점수를 얻는 게임인데요.
인접한 모든 블록이 사라지는 실제 게임들과 달리 계산을 쉽게 하기 위해
2x2로 제한하고,
사라진 블록 자리에는 새로운 블록이 채워지지 않습니다.
그럼에도 불구하고 인접한 블록을 모두 스캔해야 하는 문제라
짧지 않은 코드가 필요했을 것 같네요.
이번 시험에서 가장 긴 코드가 필요한 문제였습니다.
자바의 경우 무려 80라인이나 필요했네요.
블록 매트릭스를 생성하여 스캔하고 제거해 나가는 작업을 반복하면서
더 이상 제거되지 않을 때 사라진 블록 자리의 수를 계산하면 됩니다.
def solution(m,n,board):
total_removed = 0
while True:
to_remove = set()
# 2x2 블록 탐색
for i in range(m - 1):
for j in range(n - 1):
# 같은 블록인지 확인
if (board[i][j] != ' ' and
board[i][j] == board[i][j + 1] and
board[i][j] == board[i + 1][j] and
board[i][j] == board[i + 1][j + 1]):
to_remove.update([(i, j), (i, j + 1), (i + 1, j), (i + 1, j + 1)])
# 지울 블록이 없으면 종료
if not to_remove:
break
# 지우기
total_removed += len(to_remove)
for i, j in to_remove:
board[i] = board[i][:j] + ' ' + board[i][j + 1:]
# 아래로 떨어뜨리기
for j in range(n):
empty_row = m - 1
for i in range(m - 1, -1, -1):
if board[i][j] != ' ':
board[empty_row] = board[empty_row][:j] + board[i][j] + board[empty_row][j + 1:]
empty_row -= 1
for i in range(empty_row, -1, -1):
board[i] = board[i][:j] + ' ' + board[i][j + 1:]
return total_removed