๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/17679
๋ฌธ์ ์ค๋ช
board ๋ฌธ์์ด ๋ฐฐ์ด ์ ๋ ฅ์ ๋ฆฌ์คํธ๋ก ๋ฐ๊ฟ์ ์ฒ๋ฆฌํ์ต๋๋ค. ์ด ๋ค์ ๋ธ๋ก์ด ๋ ์ด์ ์ง์์ง์ง ์์ ๋๊น์ง while๋ฌธ์ ๋๋ฉด์ ๋ธ๋ก์ ์ง์ ์ต๋๋ค.
while๋ฌธ์์ ํ ๋ฒ์ ๋ฐ๋ณต๋ง๋ค ๋ค์์ ์คํํฉ๋๋ค.
- mxn ํฌ๊ธฐ์ remove ๋ฐฐ์ด์ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
- (0, 0) ๋ธ๋ก๋ถํฐ (m-1, n-1) ๋ธ๋ก๊น์ง ๊ฐ์ ๋ชจ์์ 2x2 ๋ธ๋ก์ ์ฐพ์ผ๋ฉด ํด๋น ์ธ๋ฑ์ค์ remove ๋ฐฐ์ด์ 1๋ก ํ์ํฉ๋๋ค.
- remove์ 1๋ก ํ์๋ ๋ธ๋ก์ ๊ฐ์๋ฅผ count์ ์ ์ฅํฉ๋๋ค. (count : ํ ํ ์ ์ง์์ง ๋ธ๋ก์ ๊ฐ์)
- ์ง์์ง ๋ธ๋ก์ ๊ฐ์๋ฅผ answer์ ๋ํฉ๋๋ค.
- ์ง์์ง ๋ธ๋ก์ด ์์ ๊ฒฝ์ฐ while๋ฌธ์ ๋น ์ ธ๋์ต๋๋ค.
์์ค์ฝ๋
def solution(m, n, board): answer = 0 for i in range(len(board)): board[i] = list(board[i]) while True: # ๊ฐ์ ๋ชจ์์ 2X2 ๋ธ๋ก์ ์ฐพ์ผ๋ฉด remove ๋ฐฐ์ด์ 1๋ก ํ์ remove = [[0]*n for _ in range(m)] for i in range(m - 1): for j in range(n - 1): if board[i][j] != 0 and board[i][j] == board[i][j + 1] and board[i][j] == board[i + 1][j] and board[i][j] == board[i + 1][j + 1]: remove[i][j], remove[i][j + 1], remove[i + 1][j], remove[i + 1][j + 1] = 1, 1, 1, 1 # ์ง์์ง ๋ธ๋ก ๊ฐ์ ์ธ๊ธฐ count = 0 for i in range(m): count += sum(remove[i]) answer += count # ์ง์์ง ๋ธ๋ก์ด ์์ ๊ฒฝ์ฐ break if count == 0: break # ์ง์์ง ๋ธ๋ก์ ์์ ๋ธ๋ก์ผ๋ก ์ฑ์ฐ๊ธฐ for i in range(m - 1, -1, -1): for j in range(n): if remove[i][j] == 1: x = i - 1 while x >= 0 and remove[x][j] == 1: x -= 1 if x < 0: board[i][j] = 0 else: board[i][j] = board[x][j] remove[x][j] = 1 return answer
728x90