반응형
오늘의 문제

중학교 때 애니팡을 많이 했었는데 이 문제를 보니까 살짝 추억이 생각나네요 ㅎㅎ
과거에 했던 게임이라 그런지 문제를 이해하는데 크게 어려움은 없었던 문제였습니다.
문제 정의
2 x 2 블록 안에 같은 문자열이 존재할 때 블록을 삭제하여 삭제된 모든 블록의 개수를 반환하는 문제였습니다.
문제 해결하기 위한 아이디어
- 4칸을 조회할 수 있는 배열 만들기
- x, y 좌표 완전 탐색
- 4칸 모두 일치하면 좌표 저장
- 중복되는 좌표 제거
- board의 좌표 제거
- 제거할 좌표가 존재하지 않을 때까지 위의 과정 반복
주의 사항
- 우선 전부 탐색해서 삭제해야 할 좌표를 찾아서 한 번에 삭제해줘야 합니다.
- 중복되는 좌표 중복 제거하기
코드 작성
sq = [[0,0],[0,1],[1,0],[1,1]] # 이동 배열 만들기
def solution(m, n, board):
answer = 0
board = [list(i)[::-1] for i in zip(*board)] # x축 y축 뒤집기
while True: # 제거할 좌표 없을 때까지 반복
remove_list= set()
for i in range(n-1):
for j in range(m-1): # board 완전 탐색
try:
now = board[i][j]
for x, y in sq: # 4칸 모드
if now != board[i+x][j+y]:
break
else: #모두 일치 시 제거할 좌표 추가
for x, y in sq:
remove_list.add((x+i, y+j))
except:
pass
if len(remove_list) == 0:
break
remove_list = list(remove_list)
remove_list.sort(key=lambda x: -x[1]) # pop을 할 때 위에서 부터 해야 원하는 idx를 제거할 수 있습니다.
for x, y in remove_list:
answer +=1
board[x].pop(y)
return answer
반응형
'코딩테스트' 카테고리의 다른 글
[Python] 백준 1430 공격 (0) | 2023.09.16 |
---|---|
[ Python ] 프로그래머스 택배상자 (0) | 2023.06.29 |
[Python] 프로그래머스 길 찾기 게임 Tree 자료형으로 풀기 (1) | 2023.05.13 |
[Python] 프로그래머스 양궁대회 (0) | 2023.05.10 |
[Python] 프로그래머스 후보키 (0) | 2023.05.07 |