알고리즘/python

[프로그래머스/Python] 250125번

minliz 2025. 4. 22. 13:43

목차

📝 문제

🎯 알고리즘 핵심 단계

✅ 실습 인증 파트_코드

⚡ 트러블 슈팅


📝 문제


🎯 알고리즘

💡 문제 이해

 

 

  • 2차원 리스트 board는 색깔 정보를 담고 있음
  • 현재 좌표는 (h, w)
    → 여기를 기준 칸이라고 하자!
  • 이 기준 칸의 상하좌우 네 칸 중에서
    • 같은 색인 칸이 몇 개인지 세는 문제

 

 

💡 문제 접근

  1. 기준 칸 색을 변수에 저장: start = board [h][w]
  2. 방향벡터 설정:
    • dx = [-1, 1, 0, 0] → 상하
    • dy = [0, 0, -1, 1] → 좌우
  3. for문으로 4방향 순회하며:
    • 이동한 칸이 범위 내인지 체크
    • 색이 같으면 카운트 증가
  4. 최종 카운트를 반환

 


✅ 실습 인증 _코드

def solution(board, h, w):
    answer = 0
    start= board[h][w]
    
    dx = [-1,1,0,0]
    dy = [0,0,-1,1]
    for i in range(4):
        nx = h+ dx[i]
        ny = w+ dy[i]
        
        if 0<=nx<len(board) and  0<=ny<len(board):
            if board[nx][ny] == start:
                answer+=1
    return answer

 


⚡ 트러블 슈팅

🔍 문제 상황        💥 원인                                                                                       ✅ 해결 방법

❌ IndexError 사방위 탐색 시 인덱스가 격자 범위 밖으로 나감 0 <= nx < len(board)
0 <= ny < len(board[0]) 로 범위 체크 필수
❌ TypeError board[nx][ny] == board[h][w] 비교할 때 자료형이 다른 경우 (예: 문자열 vs 숫자) 문제에서 색 정보가 어떤 타입인지 확인 후 정확히 비교
❌ 결과가 항상 0 사방위 탐색이 제대로 안 되었거나, 비교값이 잘못된 경우 dx, dy 방향 설정이 맞는지,
board[h][w] 기준 색을 제대로 저장했는지 확인