0이 빈 셀을 나타내고 1이 모양을 형성하는 블록을 나타내는 이진 행렬이 있다고 가정하면 이제 모양의 둘레를 찾아야 합니다. 모양은 내부에 구멍을 유지하지 않습니다.
따라서 입력이 다음과 같으면
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
그러면 출력은 14가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
d :=0
-
둘레 :=0
-
높이 :=행렬의 행 수
-
길이 :=행렬의 열 개수
-
행렬의 각 행에 대해 수행
-
c :=0
-
행의 각 val에 대해 수행
-
val이 1과 같으면
-
서라운드 :=4
-
c가 길이 - 1과 같지 않으면
-
행렬[d, c + 1]이 1과 같으면
-
서라운드 :=서라운드 - 1
-
-
-
c가 0과 같지 않으면
-
행렬[d, c - 1]이 1과 같으면
-
서라운드 :=서라운드 - 1
-
-
-
d가 높이 - 1과 같지 않으면
-
행렬[d + 1, c]가 1과 같으면
-
서라운드 :=서라운드 - 1
-
-
-
d가 0과 같지 않으면
-
행렬[d - 1, c]가 1과 같으면
-
서라운드 :=서라운드 - 1
-
-
-
둘레 :=둘레 + 서라운드
-
c :=c + 1
-
-
-
d :=d + 1
-
-
반환 둘레
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, matrix): d = 0 perimeter = 0 height = len(matrix) length = len(matrix[0]) for line in matrix: c = 0 for val in line: if val == 1: surround = 4 if c != length - 1: if matrix[d][c + 1] == 1: surround -= 1 if c != 0: if matrix[d][c - 1] == 1: surround -= 1 if d != height - 1: if matrix[d + 1][c] == 1: surround -= 1 if d != 0: if matrix[d - 1][c] == 1: surround -= 1 perimeter += surround c += 1 d += 1 return perimeter ob = Solution() matrix = [ [0,0,0,0,0], [0,0,1,1,1], [0,0,1,1,0], [0,1,1,1,0], [0,0,0,0,0] ] print(ob.solve(matrix))
입력
matrix = [ [0,0,0,0,0], [0,0,1,1,1], [0,0,1,1,0], [0,1,1,1,0], [0,0,0,0,0]]
출력
14