Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BoB 7기
- 11109
- 2605
- 5086
- 2965
- EOF
- 영재교육원
- 2501
- 정보보호 영재교육원
- BoB 후기
- 공주대 정보보호
- 5586
- boj
- 2506
- 1547
- 차세대 보안 리더 양성 프로그램
- 10995
- 2476
- Best of the Best
- text
- BOB
- 영재원
- 10833
- 차세대 보안 리더 양성
- acmicpc
- 11943
- 4101
- 리뷰
- Python
- 정보보호 영재원
Archives
- Today
- Total
짱해커가 되어보자
boj 1018 본문
문제
N * M 보드가 존재하며, 각 칸은 검은색 or 흰색으로 칠해져 있다. 이 보드를 잘라서 8*8 크기의 체스판으로 만들려고 한다. 체스판으로 만들기 위해 칸의 색을 다시 칠할 수 있다
N, M : 8 ~ 50
입력
: n, m, 체스판([n][m])출력
: N(8*8로 자른 후 칠을 가장 적게 할 수 있는 횟수)
풀이
8*8칸을 짜를 수 있는 모든 이중 반복을 : i(0, N-8), j(0, M-8)
- 반복을 수행하며 최솟값은 l[N-7][M-7]으로 생성한 리스트에 기록
8*8판을 기준으로 칠을 가장 적게 할 수 있는 횟수 : 처음 시작되는 패턴을 기반으로 8*8 칸으로 분석. 이후 최솟값은 p or 64-p 중 작은 값 반환
def p(b, n, m):
s, c = b[n][m], 0
for i in range(n, n+8):
for j in range(m, m+8):
if(s != b[i][j]): c += 1
s = 'W' if s == 'B' else 'B'
s = 'W' if s == 'B' else 'B'
return min(c, 64-c)
n, m = map(int, input().split())
b = [list(input()) for _ in range(n)]
l = [[64]*(m-7) for _ in range(n-7)]
for i in range(n-7):
for j in range(m-7):
l[i][j] = p(b, i, j)
print(min(map(min, l)))
Comments