문제 설명
n x m 크기 도화지에 그려진 그림의 색깔이 2차원 리스트로 주어집니다. 같은 색깔은 같은 숫자로 나타난다고 할 때, 그림에 있는 영역은 총 몇 개인지 알아내려 합니다. 영역이란 상하좌우로 연결된 같은 색상의 공간을 말합니다.
예를 들어, [[1,2,3], [3,2,1]] 같은 리스트는 다음과 같이 표현할 수 있습니다.
이때, 이 그림에는 총 5개 영역이 있습니다.
도화지의 크기 n과 m, 도화지에 칠한 색깔 image가 주어질 때, 그림에서 영역이 몇 개 있는지 리턴하는 solution 함수를 작성해주세요.
제한 사항
n과 m은 1 이상 250 이하인 정수입니다.
그림의 색깔은 1 이상 30000 미만인 정수로만 주어집니다.
입출력 예
n m images 정답
2 3 [[1, 2, 3], [3, 2, 1]] 5
3 2 [[1, 2], [1, 2], [4, 5]] 4
입출력 예 #1
앞서 설명한 예와 같습니다.
입출력 예 #2
주어진 이미지는 다음과 같이 표현할 수 있습니다.따라서 이 이미지에는 4개 영역이 있습니다.
접근법
주변에 같은 숫자가 있으면 자기자신과 주변영역을 모두 0으로 만들어 주었다.
작성 코드
import sys
sys.setrecursionlimit(30000)
def maketozero(x, y, img, image):
if x < 0 or y < 0 or x >= len(image) or y >= len(image[0]):
return
if image[x][y] == img:
image[x][y] = 0
# 주변을 체크해서 0으로
maketozero(x+1, y, img, image)
maketozero(x-1, y, img, image)
maketozero(x, y+1, img, image)
maketozero(x, y-1, img, image)
def solution(n, m, image):
answer = 0
for i in range(n):
for j in range(m):
if image[i][j] > 0: ## 값이 0보다 크면 1 추가
answer += 1
maketozero(i, j, image[i][j], image)
##print(image)
return answer