Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 이진 행렬의 각 행 뒤집기 및 비트 반전하기

이진 행렬(binary matrix) mat이 주어졌다고 가정해 보겠습니다. 우리가 해야 할 작업은 행렬의 각 행을 선택해 순서를 거꾸로 뒤집은 다음, 행 내의 모든 비트를 반전시키는 것입니다. 즉, 0은 1로, 1은 0으로 바꿉니다.

문제 예시

예를 들어 입력이 다음과 같다면,

110
010
001

출력 결과는 다음과 같습니다.

100
101
011

풀이 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다.

  • 행 인덱스를 나타내는 변수 track을 0으로 초기화합니다.
  • mat의 각 행에 대해 다음을 수행합니다.
    • 해당 행을 뒤집습니다(reverse).
    • 열 인덱스를 나타내는 tracker를 0으로 초기화합니다.
    • 행의 각 값 val에 대해 다음을 수행합니다.
      • val이 1이면 mat[track][tracker]를 0으로 설정합니다.
      • 그렇지 않으면(0이면) mat[track][tracker]를 1로 설정합니다.
      • tracker를 1 증가시킵니다.
    • track을 1 증가시킵니다.
  • 변환된 mat을 반환합니다.

이 알고리즘의 시간 복잡도는 행렬의 모든 원소를 한 번씩만 방문하므로 O(n × m)입니다. 여기서 n은 행의 개수, m은 열의 개수입니다.

구현 예제

아래 구현 예제를 통해 더 잘 이해해 보겠습니다.

class Solution:
   def solve(self, mat):
      track = 0
      for row in mat:
         row.reverse()
         tracker = 0
         for val in row:
            if val == 1:
               mat[track][tracker] = 0
            else:
               mat[track][tracker] = 1
            tracker += 1
         track += 1
      return mat

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

입력

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

출력

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

위 코드에서는 먼저 row.reverse()로 각 행의 순서를 뒤집은 뒤, 같은 위치의 값을 조건문으로 확인하여 0과 1을 서로 교체합니다. 이 과정을 모든 행에 적용하면 원하는 결과를 얻을 수 있습니다.