1. 문제
- 애니팡같이 블럭을 없애는 게임을 구현하는 것
2. 풀이
- 요구하는 구현이 그렇게 어렵지는 않다
- 없어지는 블록 찾기, 찾으면 블록 없애주기, 없어지면 위에 블록 당겨주기, 가능한 블록 다 없앴으면 그동안 제거한 블록 리턴
- 답을 내는 건 쉬웠는데 코드가 다소 지저분하다.
3. 코드
# 없어지는 블록을 0으로 구현했기 때문에 0을 제외한 4개가 같으면 True
def check_block(board, i, j) :
if board[i][j] == 0:
return False
if board[i][j] == board[i+1][j+1] == board[i+1][j] == board[i][j+1] :
return True
return False
# 없어지는 블록을 0으로 구현
def del_b(board, i, j) :
board[i][j] = 0
board[i+1][j+1] = 0
board[i+1][j] = 0
board[i][j+1] = 0
return
# 비어있는 블록(=0)이 있으면 블록을 당겨주는 함수
def set_b(board) :
for i in range(len(board)) :
left = []
right = []
for j in range(len(board[0])):
if board[i][j] == 0:
left += [0]
else :
right += [board[i][j]]
board[i] = left + right
return
def solution(m, n, board):
# 빈 블록을 당겨주는 구현때문에 행과 열을 바꿔주었음
b_r = [[board[y][x] for y in range(m)] for x in range(n)]
# sign으로 더이상 가능한 블록이 없을 때까지 체크
sign = 1
d = set()
while sign:
sign = 0
for i in range(n - 1) :
for j in range(m - 1) :
if check_block(b_r, i, j) :
sign = 1
# 삭제해야할 블록들을 체크해줌
d.add((i,j))
while d :
i, j = d.pop()
del_b(b_r, i, j)
set_b(b_r)
answer = 0
# 0인 블록의 수를 체크
for i in range(n) :
for j in range(m) :
if b_r[i][j] == 0 :
answer += 1
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
2018 KAKAO BLIND RECRUITMENT - 캐시, 파이썬 (0) | 2021.03.07 |
---|---|
2018 카카오 블라인드 코딩테스트 - 셔틀버스, 파이썬 (0) | 2021.03.05 |
2018 KAKAO BLIND RECRUITMENT- 뉴스 클러스터링, 파이썬 (0) | 2021.03.04 |
2018 카카오 코딩테스트 - 추석 트래픽, 파이썬 (0) | 2021.03.04 |
2019 카카오 블라인드 코딩 테스트 - 블록게임, 파이썬 (0) | 2021.03.03 |