ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2차원 동전 뒤집기
    코딩 테스트/Level 3 2022. 11. 23. 00:01
    반응형

    https://school.programmers.co.kr/learn/courses/30/lessons/131703

    비트 마스크(bitmask)를 이용해서
    모든 경우의 row를 만들면서, col를 하나씩 맞춰 보면 된다.

    비트 마스크를 직접 구현하는 것보다는
    itertools.product를 이용하는 것이 좀 더 파이써닉한 것 같아서...

    from itertools import product
    
    
    def flip_column(array, column):
        for row in array:
            if row[column]:
                row[column] = 0
            else:
                row[column] = 1
    
    
    def solution(source, target):
        answer = float('inf')
        row_length, col_length = len(source), len(source[0])
        all_flipped = [[0 if element else 1 for element in row] for row in source]
        for bit_mask in product((0, 1), repeat=row_length):
            new_rows = [all_flipped[i][:] if bit else source[i][:] for i, bit in enumerate(bit_mask)]
            counter = sum(bit_mask)
            for j in range(col_length):
                diff = False
                for i in range(row_length):
                    if new_rows[i][j] != target[i][j]:
                        diff = True
                        break
                if diff:
                    flip_column(new_rows, j)
                    counter += 1
            if new_rows == target:
                answer = min(answer, counter)
        return -1 if answer == float('inf') else answer
    테스트 1 〉	통과 (12.02ms, 10.2MB)
    테스트 2 〉	통과 (0.44ms, 10.3MB)
    테스트 3 〉	통과 (1.29ms, 10.2MB)
    테스트 4 〉	통과 (2.23ms, 10.4MB)
    테스트 5 〉	통과 (2.66ms, 10.1MB)
    테스트 6 〉	통과 (0.28ms, 10.3MB)
    테스트 7 〉	통과 (0.60ms, 10.3MB)
    테스트 8 〉	통과 (0.44ms, 10.4MB)
    테스트 9 〉	통과 (0.21ms, 10.3MB)
    테스트 10 〉	통과 (1.87ms, 10.4MB)
    테스트 11 〉	통과 (12.47ms, 10.1MB)
    테스트 12 〉	통과 (12.03ms, 10.3MB)
    테스트 13 〉	통과 (12.89ms, 10.4MB)
    테스트 14 〉	통과 (13.06ms, 10.3MB)
    테스트 15 〉	통과 (0.01ms, 10.2MB)
    테스트 16 〉	통과 (0.02ms, 10.2MB)
    테스트 17 〉	통과 (0.02ms, 10.3MB)
    테스트 18 〉	통과 (6.85ms, 10.2MB)
    테스트 19 〉	통과 (0.04ms, 10.2MB)
    테스트 20 〉	통과 (0.04ms, 10.3MB)
    테스트 21 〉	통과 (0.02ms, 10.2MB)
    반응형
Designed by Tistory.