티스토리 뷰
728x90
https://www.acmicpc.net/problem/1080
- 해설 :
0과 1로만 이루어진 행렬 A와 B가 주어질 때 A를 B로 변환시키기 위해 A를 몇 번 뒤집어야 하는지 찾는 문제이다.
A를 뒤집는다는 것은, A의 3x3 만큼의 크기를 뒤집는다는 것이다, (1이면 0으로, 0이면 1로)
- 풀이 :
A의 (0,0)부터 (N-2,N-2) 까지 탐색하며 B와 다른 원소를 만난다면 3x3만큼 뒤집어주면 된다.,
즉, 현재 내 위치의 값만 비교하여 다르다면 뒤집어주는 방법이므로 그리디에 사용했다고 볼 수 있다.
- 소스코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import sys input = sys.stdin.readline if __name__ == "__main__": N,M = map(int,input().split()) A = [list(map(int,input().strip())) for _ in range(N)] B = [list(map(int,input().strip())) for _ in range(N)] ans = 0 for i in range(N-2): for j in range(M-2): if A[i][j] != B[i][j]: for x in range(i,i+3): for y in range(j,j+3): A[x][y] = abs(A[x][y]-1) ans += 1 for i in range(N): for j in range(M): if A[i][j] != B[i][j]: print(-1) exit() print(ans) | cs |
320x100
'Algorithm > Greedy' 카테고리의 다른 글
(Python) - BOJ(1541번) : 잃어버린 괄호 (0) | 2022.01.27 |
---|---|
(Python) - BOJ(1449번) : 수리공 항승 (0) | 2022.01.26 |
(Python) - BOJ(1052번) : 물병 (0) | 2022.01.25 |
(Python) - BOJ(1049번) : 기타줄 (0) | 2022.01.25 |
(Python) - 프로그래머스 : 체육복 (0) | 2022.01.18 |
댓글
© 2022 WonSeok, All rights reserved