반응형
문제
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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기