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