반응형
문제
https://www.acmicpc.net/problem/1018
이 문제는 접근방법보다는 입력을 어떻게 받을것인가가 나에게는 더 어려웠다.
2차원 배열을 받아서 저장하는 부분은 찾아보아야했다.
문제로 넘어가면 시간제한을 보고 경우의 수를 따져봤을때 그렇게 많지않고 brute force를
통해 답을 찾을 수 있을거 같았다.
8*8사이즈로 비교해가며 주어진 배열의 모든경우의 수에서 바꿔야 할 정사각형의 최소
개수를 찾는것이다.
이때 B로 시작하는 체스판과 W로 시작하는 체스판을 따로 구해주어야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import sys n,m = map(int, sys.stdin.readline().split()) #행,열 받기 map_list = [list(sys.stdin.readline().strip()) for _ in range(n)] #2차원 배열로 저장 result=50*50 print(map_list) for i in range(n-7): for j in range(m-7): #시작위치지정 #B로 시작할때 check = 'B' sum=0 for k in range(i,i+8): #위치에서 8*8만큼 때어내서 비교 for l in range(j,j+8): if map_list[k][l]!=check: #체크와 해당값 비교하여 다르면 +1 sum+=1 if(l!=j+7): #마지막에서 다음줄로 넘어갈때는 check안바뀜 if check=='B': #체크를 바꿔줌 check='W' else: check='B' if result>sum: #바꿀횟수가 기존보다 작다면 바꿔줌 result=sum #W로 시작할때 check = 'W' sum = 0 for k in range(i,i + 8): for l in range(j,j + 8): if map_list[k][l] != check: sum+=1 if (l != j + 7): if check == 'B': check = 'W' else: check = 'B' if result > sum: result = sum print(result) | cs |
반응형
'알고리즘(python) > 탐색' 카테고리의 다른 글
[Python]백트래킹 백준 15649 (0) | 2020.01.04 |
---|---|
[Python]Brute force 백준 1436 (0) | 2019.12.17 |
[Python]Brute force 백준 7568 (0) | 2019.12.16 |
[Python]Brute force 백준 2231 (0) | 2019.12.16 |
[Python]Brute force 백준 17298 (0) | 2019.12.15 |
최근댓글