Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 섬 모양의 둘레를 찾는 프로그램

<시간/>

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