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

Python의 이진 행렬에서 가장 왼쪽 1이 존재하는 열 인덱스를 찾는 프로그램은 무엇입니까?

<시간/>

2D 이진 행렬이 있다고 가정합니다. 여기서 각 행은 0이 1보다 먼저 오는 오름차순으로 정렬됩니다. 값이 1인 가장 왼쪽 열 인덱스를 찾아야 합니다. 이러한 결과가 없으면 -1을 반환합니다.

따라서 입력이 다음과 같으면

0 0 0 1
0 0 1 1
0 0 1 1
0 0 1 0

두 번째 열이 전체 행렬에서 대부분 1을 남기므로 출력은 2가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • 행렬이 비어 있으면

    • 반환 -1

  • N :=행렬의 행 수

  • M :=행렬의 열 개수

  • i :=0, j :=M - 1

  • 맨 왼쪽 :=-1

  • i =0인 동안 수행

    • 행렬[i, j]가 0과 같으면

      • 나는 :=나는 + 1

    • 그렇지 않으면

      • 맨 왼쪽 :=j

      • j :=j - 1

  • 맨 왼쪽으로 돌아가기


예시

class Solution:
   def solve(self, matrix):
      if not matrix or not matrix[0]:
         return -1

      N = len(matrix)
      M = len(matrix[0])

      i = 0
      j = M - 1

      leftmost = -1

      while i < N and j >= 0:
         if matrix[i][j] == 0:
            i += 1
         else:
            leftmost = j
            j -= 1

      return leftmost

ob = Solution()
matrix = [
   [0, 0, 0, 1],
   [0, 0, 1, 1],
   [0, 0, 1, 1],
   [0, 0, 1, 0]
]
print(ob.solve(matrix))

입력

[
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 0, 1, 1],
[0, 0, 1, 0] ]

출력

2