IT
[레벨2] 프렌즈4블록
자비단
2023. 5. 6. 00:38
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/17679
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2018년 카카오 블라인트 리쿠르트 기출 문제이다.
애니팡과 같은 게임을 푸는 코드를 작성하면 된다.
고급 알고리즘을 구현할 필요는 없지만, 머리를 좀 써야하는 문제였다.
나는 다음과 같은 구조로 코드를 작성하였다.
1. 팡 할 부분 탐색
2. 팡
3. 팡해서 빈 부분을 인형으로 채움
4. 더 이상 변화가 없을 때까지 1-3을 반복
def solution(m,n,board):
def play(board):
board = [list(i) for i in board]
# "팡 " 할 부분 탐색
res = []
for i in range(m-1):
for j in range(n-1):
if board[i][j]==board[i+1][j]==board[i][j+1]==board[i+1][j+1]:
res.append((i,j))
# " 팡 "한 부분을 빈칸으로
for (i,j) in res:
board[i][j] = " "
board[i+1][j] = " "
board[i][j+1] = " "
board[i+1][j+1] = " "
# 아래가 빈칸이면 내리기
res = []
for i in range(n):
tmp = ""
for j in range(m):
tmp += board[j][i]
res.append(tmp.replace(" ", "").rjust(m))
new_board = [[" " for i in range(n)] for j in range(m)]
for i in range(m):
for j in range(n):
new_board[i][j] = res[j][i]
return new_board
# 모두 팡 할 때까지 반복
new_board = play(board)
while board != new_board:
board = new_board
new_board = play(board)
answer = m*n - len("".join(["".join(i) for i in new_board]).replace(" ", ""))
return answer
반응형