job다한 공부

백준 1018번: 체스판 다시 칠하기-파이썬(python) 본문

백준/브루트포스

백준 1018번: 체스판 다시 칠하기-파이썬(python)

시현한 하루 2022. 9. 30. 01:31
728x90

https://www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net


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
#체스판 다시칠하기-두가지 경우로 나눠서 생각하가
 
a,b=map(int,input().split())
lst=[[0 for j in range(b)]for i in range(a)]
 
for i in range(a):
  lst[i]=list(input())
 
#입력 완료 후 각 칸에 대해 검사하기
check=[[0 for j in range(b)]for i in range(a)]
max=0
for i in range(a-7):
  for j in range(b-7):
    tmp=0
 
    for k in range(i,i+8):
        for t in range(j,j+8):
            if (k-i+t-j)%2==0#짝수일때
                if lst[k][t]=="W":
                    tmp+=1
            else#홀수일때
                if lst[k][t]=="B":
                    tmp+=1
 
    for k in range(i,i+8):
        for t in range(j,j+8):
            if (k+t-i-j)%2==0#짝수일때
                if lst[k][t]=="B":
                    check[i][j]+=1
            else#홀수일때
                if lst[k][t]=="W":
                    check[i][j]+=1
    if tmp>check[i][j]:
        check[i][j]=tmp
          
    if max<check[i][j]:
          max=check[i][j]
 
print(64-max)
 
##문제= 만약 첫째빼고 다 일치해버린다면 어떻게 해야하나-둘 다 검사 돌려
cs

+실수했던 부분이 첫 좌표 가지고 다 돌려버렸는데 그러는게 아니라 w,b기준으로 둘 다 돌려서 더 많이 해당되는 경우의 수를 찾아줘야한다.

728x90