공부/백준(C++) - 2022~

백준 1018번: 체스판 다시 칠하기 [C++]

상연 2022. 1. 25. 20:22

목차

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

     

    1018번: 체스판 다시 칠하기

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

    www.acmicpc.net

    코드

    #include <iostream>
    using namespace std;
    
    char case1[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 case2[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 main() {
    	int n, m, answer = 99999999;
    	cin >> n >> m;
    	
    	char board[n][m];
    	for(int i=0; i<n; i++)
    	{
    		string line;
    		cin >> line;
    		
    		for(int j=0; j<m; j++)
    		{
    			board[i][j] = line[j];
    		}
    	}
    	
    	for(int i=0; i<n-7; i++)
    	{
    		for(int j=0; j<m-7; j++)
    		{
    			int diff1 = 0;
    			int diff2 = 0;
    			for(int x=0; x<8; x++)
    			{
    				for(int y = 0; y < 8; y++)
    				{
    					if(board[i+x][j+y] != case1[x][y]) diff1++;
    					if(board[i+x][j+y] != case2[x][y]) diff2++;
    				}
    			}
    			int small_diff = diff1 < diff2 ? diff1 : diff2;
    			answer = small_diff < answer ? small_diff : answer;
    		}
    	}
    	
    	cout << answer;
    	
    	
    	return 0;
    }

     

    설명

    예전에 맨 처음 이 문제를 접했을때는 진짜 3시간을 고민하고도 못 풀어서 굉장히 좌절했었던 기억이 있다.

    이번에는 비교적 꽤 쉽게 풀 수 있었는데

    그냥 주어진 판에서 8X8 로 자를 수 있는 모든 부분을 정상적인 체스판와 대입해서 얼마나 차이가 있는지 확인하면 된다. 그 차이가 가장 적은 수를 출력.

    '공부 > 백준(C++) - 2022~' 카테고리의 다른 글

    백준 2750번: 수 정렬하기[C++]  (0) 2022.01.26
    백준 1436번: 영화감독 숌 [C++]  (0) 2022.01.25
    백준 7568번: 덩치 [C++]  (0) 2022.01.25
    백준 2231번: 분해합 [C++]  (0) 2022.01.25
    백준 2798번: 블랙잭 [C++]  (0) 2022.01.25