-
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)
반응형