어디까지 갈 수 있을까?
[문자열] 프로그래머스 프렌즈4블록 본문
문제링크 programmers.co.kr/learn/courses/30/lessons/17679
1. 전치행렬을 만들어주기 위해 list(map(list, zip(*board)))
1-1. list를 unpacking 하기 위해 *
1-2. zip()은 tuple을 반환하는데 tuple은 값 변경이 안 되니 list로 바꿔줌
1-3. map()은 주소값을 반환하기 때문에 list()로 묶어줌
2. 중복되는 원소를 넣지 않기 위해 set() / set.add()
[답코드]
import copy
def solution(m, n, board):
answer = 0
board = list(map(list, zip(*board))) #*는 리스트를 unpacking 한다
while True:
remove=set()
for i in range(len(board)-1):
for j in range(len(board[i])-1):
if board[i][j]!='_' and board[i][j]==board[i+1][j]==board[i][j+1]==board[i+1][j+1]:
remove.add((i, j))
remove.add((i+1, j))
remove.add((i, j+1))
remove.add((i+1, j+1))
if not remove:
break
answer+=len(remove)
for k in remove:
i, j=k
board[i][j]='_'
for i in range(len(board)):
front, back=[],[]
for j in range(len(board[i])):
if board[i][j]=='_':
front.append('_')
else:
back.append(board[i][j])
board[i]=front+back
return answer
728x90
'알고리즘 > 문제' 카테고리의 다른 글
[해시] 프로그래머스 베스트앨범 (0) | 2021.05.07 |
---|---|
프로그래머스 후보키 (0) | 2021.05.07 |
[문자열] 프로그래머스 압축 (0) | 2021.05.05 |
[문자열] 프로그래머스 방금그곡 (0) | 2021.05.04 |
[해시] 프로그래머스 위장 (0) | 2021.05.03 |
Comments