๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ”„๋ Œ์ฆˆ4๋ธ”๋ก

by syLim___ 2023. 7. 19.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/17679#

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


ํ•œ์‹œ๊ฐ„์ •๋„ ๊ฑธ๋ ค์„œ ํ‘ผ ๋นก๊ตฌํ˜„๋ฌธ์ œ,,

 

ํ–‰์˜ ๊ฐœ์ˆ˜๊ฐ€ m, ์—ด์˜ ๊ฐœ์ˆ˜๊ฐ€ n์ด๋ผ๋Š” ์ ๊ณผ, ๋ธ”๋ก ๋‚ด๋ฆฌ๋Š” ๋กœ์ง๋งŒ ์ฃผ์˜ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

๋‚˜์ค‘์— ๋‹ค์‹œ ํ’€์–ด๋ฐ”์•ผ์ง€

from collections import deque

def solution(m, n, board):
    new_board = []
    for i in range(m):
        new_board.append(list(board[i]))
        
    answer = 0
    q = deque()
    
    while True:
        # ์ง€์šธ ๋ธ”๋ก ์ฐพ๊ธฐ (4๊ฐœ ๋ธ”๋ก ์ค‘ ์™ผ์ชฝ ์œ„ ์  ํ•˜๋‚˜ ์ขŒํ‘œ)
        for i in range(m-1):
            for j in range(n-1):
                if new_board[i][j] == '':
                    continue
                if new_board[i][j] != new_board[i][j+1]:
                    continue
                if new_board[i][j] != new_board[i+1][j+1]:
                    continue
                if new_board[i][j] != new_board[i+1][j]:
                    continue
                q.append((i,j))
        
        # ๋” ์ด์ƒ ์ง€์šธ ๋ธ”๋ก์ด ์—†์œผ๋ฉด ๋ฆฌํ„ด
        if len(q) == 0:
            return answer

        # ์ง€์šฐ๊ธฐ ์ž‘์—…, ์ง€์›Œ์ง„ ๋ธ”๋ก ์นด์šดํŠธ
        dx = [0,0,1,1]
        dy = [0,1,0,1]
        while q:
            x,y = q.popleft()
            for i in range(4):
                if new_board[x+dx[i]][y+dy[i]] != '':
                    answer += 1
                    new_board[x+dx[i]][y+dy[i]] = ''
        # ๋ธ”๋ก ๋–จ์–ดํŠธ๋ฆฌ๊ธฐ
        for i in range(m-1,1,-1):
            for j in range(n):
                if new_board[i][j] != '':
                    continue
                temp = i
                while temp > 0:
                    temp -= 1
                    if new_board[temp][j] != '':
                        new_board[i][j] = new_board[temp][j]
                        new_board[temp][j] = ''
                        break
728x90