💗 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💗 코드 미리보기
def solution(m, n, board):
answer = 0
board = [list(i) for i in board]
while True:
checked = [[0 for _ in range(n)] for _ in range(m)]
for i in range(m - 1):
for j in range(n - 1):
if board[i][j] != 0 and board[i][j] == board[i + 1][j] == board[i][j + 1] == board[i + 1][j + 1]:
checked[i][j] = 1
checked[i][j + 1] = 1
checked[i + 1][j] = 1
checked[i + 1][j + 1] = 1
cnt = 0
for i in range(m):
for j in range(n):
if checked[i][j] == 1:
cnt += 1
board[i][j] = 0
for i in range(m):
for j in range(n):
if board[i][j] != 0:
for a in range(i+1, m):
if checked[a][j] == 1:
board[i][j], board[a][j] = board[a][j], board[i][j]
if cnt == 0:
break
else:
answer += cnt
return answer
💗 코드 쪼개보기
2x2 형태로 4개가 붙어있어 제거해야하는 블록들을 checked를 통해 처리함
checked = [[0 for _ in range(n)] for _ in range(m)]
for i in range(m - 1):
for j in range(n - 1):
if board[i][j] != 0 and board[i][j] == board[i + 1][j] == board[i][j + 1] == board[i + 1][j + 1]:
checked[i][j] = 1
checked[i][j + 1] = 1
checked[i + 1][j] = 1
checked[i + 1][j + 1] = 1
checked가 0인 경우, 제거해야할 블록이 더이상 없는 것이므로 함수를 빠져나가도록!
cnt = 0
for i in range(m):
for j in range(n):
if checked[i][j] == 1:
cnt += 1
board[i][j] = 0
if cnt == 0:
break
else:
answer += cnt
블록을 아래로 내려주는 함수
for i in range(m):
for j in range(n):
if board[i][j] != 0:
for a in range(i+1, m):
if checked[a][j] == 1:
board[i][j], board[a][j] = board[a][j], board[i][j]
728x90
'💡코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/python] 조이스틱 (0) | 2023.04.14 |
---|---|
[python | 프로그래머스] LV.2 게임 맵 최단거리 (0) | 2023.04.05 |
[프로그래머스 | 2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임 (0) | 2023.02.07 |
[프로그래머스 | 2020 카카오 인턴십] 키패드 누르기 (0) | 2023.02.07 |
[프로그래머스 | 2019 카카오 개발자 겨울 인턴십] 튜플 (0) | 2023.02.07 |