[프로그래머스 파이썬] 이웃한 칸

일단 해볼게·2024년 1월 16일
0

프로그래머스

목록 보기
89/106

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

from collections import deque
def solution(board, h, w):
    n = len(board) # len(board) = len(board[n]) 이므로 정사각형
    
    def check(a, b):
        q = deque()
        q.append((a, b))
        count = 0
        
        # 상하좌우 체크용 변수 
        dx = [-1, 1, 0, 0] 
        dy = [0, 0, -1, 1] 
        
        while q:
            x, y = q.popleft()
            
            for i in range(4):
                nx = dx[i] + x 
                ny = dy[i] + y
                
                if 0 <= nx < n and 0 <= ny < n: # 범위 내에 존재
                    if board[x][y] == board[nx][ny]: # 색깔이 같은 경우
                        count += 1
        return count
    
    return check(h, w)

bfs였으면 색깔이 같은 경우 count += 1 하는 곳에 q.append((nx, ny)) 코드가 추가된다. 그러나 상하좌우만 탐색하므로 추가하지 않았다. 더불어 while문도 필요없다.

문제 설명대로 구현한 코드

def solution(board, h, w):
    length = len(board[0])

    numberOfSameColor = 0

    dh, dw = [0, 1, -1, 0], [1, 0, 0, -1]

    for i in range(4):
        h_check, w_check = h + dh[i], w + dw[i]

        if 0 <= h_check < length and 0 <= w_check < length:
            if board[h_check][w_check] == board[h][w]:
                numberOfSameColor += 1

    return numberOfSameColor
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글