문제
https://school.programmers.co.kr/learn/courses/30/lessons/17679
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
짝 맞추기 게임에서 2 * 2의 크기 만큼 짝을 맞추면 되는 게임이다.
여기서 중요한 점은 연쇄적으로 터지는 것이 아니라, 동시에 터진다는 것이다.
입출력에서 2 * 2 크기가 겹쳐서 터지는 부분들이 있다.
이것을 유의해두고 문제 풀이를 진행하면 된다.
1. for문을 (0, 0) -> (m - 1, n - 1) 지점까지 돈다.
2. 돌면서 board가 2 * 2 방향으로 같은지 확인
3. 같은 짝들끼리는 동시에 없애주기
4. 모든 블럭 아래로 내려주기
1번과 2번은 단순하게 구현하면 된다.
3번의 경우 동시에라는 키워드가 들어갔기에 터질 블럭을 배열에 쌓아두고 한꺼번에 처리해줘야 한다.
그렇기에 removes라는 배열을 만들어서 2번이 수행됐을 때 현재 지점부터 오른쪽, 아래, 오른쪽 아래를 모두 추가해주었다.
그리고 한꺼번에 지웠다.
4번의 경우 2중 for문을 돌릴 때 열을 기준으로 먼저 돌리고 행을 나중에 돌려주었다.
아래에서부터 당겨주어야 하기에 넣어줘야 하는 행 idx를 마지막 idx - 1로 초기화 해주었다.
그리고 당겨질 때마다 -1씩 해주었다.
정답코드
더보기
'''
'25. 11. 2(일)
1. 2 * 2 형태의 똑같은 모양이 4개가 있다면 점수를 얻는다.
1. (0, 0) -> (m - 1, n - 1) 여기까지 for문
2. 좌측 상단부터 오른쪽, 아래, 오른쪽 아래를 체크해봐야 된다.
3. 삭제 한꺼번에 기록
'''
def find(row: int, col: int, board: list) -> bool:
return board[row][col] == board[row + 1][col] == board[row][col + 1] == board[row + 1][col + 1]
def down_block(board: list) -> list:
ret = [[''] * len(board[0])for _ in range(len(board))]
#맨 아래 블럭부터 당겨주기
for col in range(len(board[0])):
#맨 아래 블럭부터
insert_idx = len(board) - 1
for row in range(insert_idx, -1, -1):
if board[row][col]:
ret[insert_idx][col], board[row][col] = board[row][col], ''
insert_idx -= 1
return ret
def solution(m, n, board):
answer = 0
for row in range(m):
board[row] = [*board[row]]
#print(board)
while 1:
removes = []
for i in range(m-1):
for j in range(n-1):
if board[i][j] and find(i, j, board):
removes.append((i, j))
removes.append((i, j + 1))
removes.append((i + 1, j))
removes.append((i + 1, j + 1))
#print(1)
if removes:
while removes:
x, y = removes.pop()
if board[x][y]:
answer += 1
board[x][y] = ''
board = down_block(board)
else:
break
return answer
깃허브 : https://buly.kr/4QoBwbI
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 정렬 / 가장 큰 수 (0) | 2025.11.12 |
|---|---|
| 프로그래머스 / 비트마스킹 / 2개 이하로 다른 비트 (0) | 2025.11.08 |
| 프로그래머스 / 정규표현식, 문자열 / [3차] 파일명 정렬 (0) | 2025.11.01 |
| 프로그래머스 / DP / 2 * n 타일링 (0) | 2025.10.19 |
| 프로그래머스 / 구현 / 주차 요금 계산 (0) | 2025.10.18 |