728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131703
분석
- beginning, target 값이 다르면 1, 같으면 0으로 이차원 diff 배열에 저장
- 행마다 뒤집으면서 모든행을 1행과 같게 만들어서, 다른 값(1)이 있는 열만 뒤집으면 목표 상태로 만들 수 있음
- diff 1행과 2~n번째 행 비교 : 다르면 뒤집기
- 뒤집어도 첫행과 다르다면 목표 상태로 만들 수 없기 때문에 -1 리턴
- 모든 행은 같으므로 1행의 다른값(1)의 갯수를 체크 (1행의 1의 갯수 = 열 뒤집는 횟수)
- 행 뒤집는 횟수 + 열뒤집는 횟수, 열뒤집는 횟수 + 행뒤집는 횟수 중 최솟값 리턴
풀이
def solution(beginning, target):
n = len(target)
m = len(target[0])
diff = [[beginning[i][j] ^ target[i][j] for j in range(m)] for i in range(n)]
sumr = 0
for i in range(1,n):
if (diff[i] != diff[0]):
sumr+=1 # 행 뒤집는 횟수
if list(map(lambda x: x ^ 1, diff[i])) != diff[0]:
return -1
sumc= sum(diff[0]) # 열 뒤집는 횟수
return min(sumr+sumc, (n-sumr)+(m-sumc))
728x90