[백준] 1018번

그녕·2023년 3월 30일
0

알고리즘 문제 풀이

목록 보기
24/33

백준 1018번

브루트포스

🌸내 풀이🌸

가로가 M,세로가 N이다. 세로줄 만큼 입력 받으면 돼서 range(N)으로 두었다.

두번째 달락에서의 첫번째, 두번째 for문은 체스판의 시작점을 잡기 위한 반복문이다. 시작점을 어디로 할지 정해줘야하고 거기에 반복을 해줘야지 최소를 구할수 있기 때문이다.

idx1은 시작점이 W인 경우이고, idx2는 시작점이 B인 경우이다. 각자 두 경우 다 구해서 최소인것을 선택해야한다.

이렇게 설정하고 나면 시작점 a,b를 기준으로 8칸 다 돌아야하므로 다시 for문을 돌려주고 조건이 나오게 된다.
만약 행과 열의 합이 짝수이면 시작점과 같은 문자이고, 홀수면 다른 문자이다. 그래서 idx1와 idx2의 조건을 따로 두어야한다. 이렇게 다 구한 다음에 두 경우의 최소값을 비교하면 된다. 그 다음 그 여러 값들의 최소를 출력하면 된다.

🌸내 코드🌸

N,M= map(int,input().split())
arr=[]
cnt=[]
for _ in range(N):
    arr.append(input())

for a in range(N-7):
    for b in range(M-7):
        idx1=0
        idx2=0
        for i in range(a,a+8):
            for j in range(b,b+8):
                if (i+j)%2==0:
                    if arr[i][j]=='W':
                        idx1+=1
                    if arr[i][j]=='B':
                        idx2+=1
                else:
                    if arr[i][j]=='B':
                        idx1+=1
                    if arr[i][j]=='W':
                        idx2+=1
        cnt.append(min(idx1,idx2))
    
print(min(cnt))

0개의 댓글