본문 바로가기

CodeGym/프로그래머스

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

728x90


문제설명

더보기

각 칸마다 색이 칠해진 2차원 격자 보드판이 있습니다. 그중 한 칸을 골랐을 때, 위, 아래, 왼쪽, 오른쪽 칸 중 같은 색깔로 칠해진 칸의 개수를 구하려고 합니다.

보드의 각 칸에 칠해진 색깔 이름이 담긴 이차원 문자열 리스트 board와 고른 칸의 위치를 나타내는 두 정수 h, w가 주어질 때 board[h][w]와 이웃한 칸들 중 같은 색으로 칠해져 있는 칸의 개수를 return 하도록 solution 함수를 완성해 주세요.

이웃한 칸들 중 몇 개의 칸이 같은 색으로 색칠되어 있는지 확인하는 과정은 다음과 같습니다.

 

제한사항

더보기
  • 1 ≤ board의 길이 ≤ 7
    • board의 길이와 board[n]의 길이는 동일합니다.
  • 0 ≤ h, w < board의 길이
  • 1 ≤ board[h][w]의 길이 ≤ 10
    • board[h][w]는 영어 소문자로만 이루어져 있습니다.

 

입출력 예

 


문제풀이

  • 이번 문제는 차후에 DFS 및 BFS 문제를 풀때 방향 탐색을 하는 기본의 틀을 공부해 볼 수 있는 문제이다. 색이 칠해져있는 board가 주어지고 좌표가 주어졌을때 해당 좌표의 주변의 색상을 확인하고 같은 색의 숫자를 리턴하는 것이다. 보통은 길을 찾을 때 해당 4방향 탐색을 진행하고 해당 위치에서 또 재귀나 반복문을 들어가는 것이 탐색의 기본이다.
  • 첫번째 방법으로 풀고나서 다른사람들 풀이를 보고 가독성 면에서 안좋은 것 같아서 다시 작성해 보았다. 코드를 작성하면서 가독성을 높이는 코드를 작성하는것도 습관을 들이는 것이 필요한것 같다.

코드 & 설명

def solution(board, h, w):
    answer = 0
    dh = [0, 1, -1, 0]
    dw = [1, 0, 0, -1]
    for i in range(4):
        if h+dh[i] >= 0 and h+dh[i] < len(board) and w+dw[i] >= 0 and w+dw[i] < len(board):
            if board[h][w] == board[h+dh[i]][w+dw[i]]:
                answer+=1
    return answer
def solution(board, h, w):
    answer = 0
    dh = [1, -1, 0, 0]
    dw = [0, 0, 1, -1]
    color = board[h][w]
    for i in range(4):
        x = h + dh[i]
        y = w + dw[i]
        if 0 <= x < len(board) and 0 <= y < len(board):
            if board[x][y] == color:
                answer += 1
    return answer
728x90