본문 바로가기

CodingTest

이웃한 칸

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 개요

선택한 칸의 색과 같은 색을 가진 이웃 칸의 개수를 구하는 문제이다.

 

이웃칸은 선택한 칸의 상/하/좌/우에 위치한 칸들이다.

 

이웃칸들을 탐색할 때, board의 범위 밖으로 벗어나지 않게 주의해야 한다.

 

알고리즘 및 풀이

1. 변수 설정

def solution(board, h, w):
    ans = 0
    n, m = len(board), len(board[0])
    color = board[h][w]
    
    dx = [0, 1, 0, -1]
    dy = [-1, 0, 1, 0]

 

여기서 탐색에 필요한 변수들을 설정한다.

 

dx와 dy는 상/하/좌/우로 탐색하는 과정에서, 탐색할 위치의 좌표를 구하기 위해 필요하다.

 

2. 4개 방향(상, 하, 좌, 우)으로 탐색을 시작한다

    for i in range(4):
    	# 1) 탐색할 곳의 좌표 파악
        nx = h + dx[i]
        ny = w + dy[i]
        
        # 2) 좌표가 탐색범위를 벗어나지 않고, 색깔이 같은 지 판단
        if -1 < nx < n and -1 < ny < m and board[nx][ny] == color:
            ans += 1

 

여기서 살펴볼 좌표를 구한다.

 

앞서 구한 좌표가 탐색 범위를 벗어나지 않고, 색깔이 같다면 ,찾은 칸의 갯수를 증가시킨다.

 

 

전체 코드

def solution(board, h, w):
    ans = 0
    n, m = len(board), len(board[0])
    color = board[h][w]
    
    dx = [0, 1, 0, -1]
    dy = [-1, 0, 1, 0]

    for i in range(4):
    	# 1) 탐색할 곳의 좌표 파악
        nx = h + dx[i]
        ny = w + dy[i]
        
        # 2) 좌표가 탐색범위를 벗어나지 않고, 색깔이 같은 지 판단
        if -1 < nx < n and -1 < ny < m and board[nx][ny] == color:
            ans += 1
    
    return ans

 

 

'CodingTest' 카테고리의 다른 글

[PCCE 기출문제] 10번 / 데이터 분석  (0) 2024.04.03
연속된 부분 수열의 합  (1) 2024.03.27
과제 진행하기  (0) 2024.03.16
[PCCP 기출문제] 2번 / 석유 시추  (0) 2024.03.05
[PCCP 기출문제] 1번 / 붕대 감기  (0) 2024.03.04