[BOJ / 백준] 1018번 체스판 다시 칠하기 C++ 문제 풀이

2020. 12. 2. 02:04·Baekjoon/단계별로 풀어보기
728x90

단계별로 풀어보기 - 브루트 포스 단계 - [4단계] 1018번

문제

문제 링크 : www.acmicpc.net/problem/1018

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

입력 복사 : 

> 예제 입력 1

8 8 WBWBWBWB BWBWBWBW WBWBWBWB BWBBBWBW WBWBWBWB BWBWBWBW WBWBWBWB BWBWBWBW

> 예제 입력 2

10 13 BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB BBBBBBBBWBWBW BBBBBBBBBWBWB WWWWWWWWWWBWB WWWWWWWWWWBWB

 

 

 

 

CODE

#include <iostream>
using namespace std;

char arr[51][51];
char white_arr[8][8] = {
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W'
};

char black_arr[8][8] = {
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B',
	'B','W','B','W','B','W','B','W',
	'W','B','W','B','W','B','W','B'
};

int white_first(int x, int y) {
	int result = 0;
	for (int i = 0; i < 8; i++) {
		for (int j = 0; j < 8; j++) {
			if (arr[x + i][y + j] != white_arr[i][j])
				result++;
		}
	}
	return result;
}

int black_first(int x, int y) {
	int result = 0;
	for (int i = 0; i < 8; i++) {
		for (int j = 0; j < 8; j++) {
			if (arr[x + i][y + j] != black_arr[i][j])
				result++;
		}
	}
	return result;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, m, result = 64;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			cin >> arr[i][j];

	int t_white, t_black;
	for (int i = 0; i <= n - 8; i++) {
		for (int j = 0; j <= m - 8; j++) {
			t_white = white_first(i, j);
			t_black = black_first(i, j);
			if (t_white < t_black) {
				result = (t_white < result) ? t_white : result;
			}
			else {
				result = (t_black < result) ? t_black : result;
			}
		}
	}
	cout << result << '\n';
}

 

 

 

 

풀이

for (int i = 0; i <= n - 8; i++) {
		for (int j = 0; j <= m - 8; j++) {
			t_white = white_first(i, j);
			t_black = black_first(i, j);

모든 8 * 8 크기의 잘라낸 체스판에 대해 다시 칠해야 하는 최소의 수를 계산한다.

 

 

if (t_white < t_black) {
				result = (t_white < result) ? t_white : result;
			}
			else {
				result = (t_black < result) ? t_black : result;
			}

위와 같이 white로 시작하는 경우와 black으로 시작하는 경우를 모두 고려하여 최소값을 구한다.

 

 

 

 

 

결과

728x90
저작자표시 (새창열림)

'Baekjoon > 단계별로 풀어보기' 카테고리의 다른 글

[BOJ / 백준] 2751번 수 정렬하기 2 C++ 문제 풀이  (0) 2021.05.15
[BOJ / 백준] 1436번 영화감독 숌 C++ 문제 풀이  (0) 2020.12.02
[BOJ / 백준] 7568번 덩치 C++ 문제 풀이  (0) 2020.11.26
[BOJ / 백준] 2231번 분해합 C++ 문제 풀이  (0) 2020.11.26
[BOJ / 백준] 2798번 블랙잭 C++ 문제 풀이  (0) 2020.11.26
'Baekjoon/단계별로 풀어보기' 카테고리의 다른 글
  • [BOJ / 백준] 2751번 수 정렬하기 2 C++ 문제 풀이
  • [BOJ / 백준] 1436번 영화감독 숌 C++ 문제 풀이
  • [BOJ / 백준] 7568번 덩치 C++ 문제 풀이
  • [BOJ / 백준] 2231번 분해합 C++ 문제 풀이
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (338) N
      • Web (8)
      • Java (7)
      • Spring (18) N
      • Git (16)
      • MyBatis (1)
      • HTML & CSS (14)
      • JavaScript (11)
      • DevOps (4)
      • Cloud (8)
      • Lanuage (13)
        • C++ (3)
        • Python (10)
      • DB (1)
        • MySQL (1)
        • Oracle (2)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    C
    spring
    MySQL
    JavaScript
    oracle
    알고리즘
    git
    db
    단계별로 풀어보기
    VS Code
    HTML
    codeup
    github
    Cloud
    BOJ
    c++
    CSS
    java
    web
    자료구조
    clean code
    Programmers
    myBatis
    웹
    Python
    Tistory
    aws
    CodeUp 기초 100제
    SourceTree
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[BOJ / 백준] 1018번 체스판 다시 칠하기 C++ 문제 풀이
상단으로

티스토리툴바