[파이썬] 프로그래머스 : 프렌즈 4블록 (레벨2)
풀이
방향성 생각
- 아래로 떨어지는거 구현하기 불편해서 transpose + 각 row에서 reversed 시켜서 풀이
python
def solution(m, n, board):
# 2x2 박스 체크
def check(x,y):
temp = set(arr[yy][xx] for xx,yy in [(x,y),(x+1,y),(x,y+1),(x+1,y+1)])
return len(temp) == 1 and '#' not in temp
# 2x2 박스 제거
def remove(x,y):
for xx,yy in [(x,y),(x+1,y),(x,y+1),(x+1,y+1)]:
arr[yy][xx] = '#'
# 아래로 떨어지는거를 왼쪽으로 밀리는 방식으로 구현 / 좌표계 변환
arr = [list(row[::-1]) for row in zip(*board)]
H,W = n,m
while True:
remove_locs = [(x,y) for y in range(H-1) for x in range(W-1) if check(x,y)]
# 제거할거 없으면 탈출
if not remove_locs:
break
# 있으면 제거
for x,y in remove_locs:
remove(x,y)
# 떨어지는거 구현
for y in range(H):
temp = [val for val in arr[y] if val != '#']
temp.extend(['#']*(W-len(temp)))
arr[y] = temp
# #개수 구하기
answer = 0
for y in range(H):
for x in range(W):
if arr[y][x] == '#':
answer += 1
return answer
코멘트
- 배열의 테두리에서 시작하는 방법은 패딩을 하면 쉽게 풀리는 문제가 많다.
- A to Z까지 쓴다고 나와있어서 #으로 바꿨음...
'Algorithm > Simulation' 카테고리의 다른 글
[파이썬] SWEA 5648 : 원자 소멸 시뮬레이션 (TEST) (0) | 2025.04.12 |
---|---|
[파이썬] SWEA 4013 : 특이한 자석 (test) (0) | 2025.04.10 |
[파이썬] 백준 17822 : 원판 돌리기 (골드2) (0) | 2025.03.21 |
[파이썬] 프로그래머스 : 충돌 위험 찾기 (레벨2) (0) | 2025.03.19 |
[파이썬] 프로그래머스 : 행렬 테두리 회전하기 (레벨2) (0) | 2025.03.17 |
[자바] SWEA 6109 : 추억의 2048 게임 (D4) (0) | 2025.03.09 |
[파이썬] SWEA 5644 : 무선 충전 (TEST) (0) | 2025.03.09 |
댓글