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

2023. 8. 4. 20:24·프로그래밍 공부/백준 (C++)

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

 

1018번: 체스판 다시 칠하기

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

www.acmicpc.net

 

해결 방법

   네 가지 경우가 있다.

  1.  (0,0) 이 B로 시작하고 현재 인덱스의 원소가 B인경우
  2.  (0,0) 이 B로 시작하고 현재 인덱스의 원소가 W인경우
  3.  (0,0) 이 W로 시작하고 현재 인덱스가 B인경우
  4.  (0,0) 이 W로 시작하고 현재 인덱스가 W인경우

이 네 가지 경우를 잘 생각해서 전부 세어주면 된다. Climits 헤더의 INT_MAX 를 사용하여 min 변수의 초기값을 설정해 주었다.

 

#include <iostream>
#include <stack>
#include <string>
#include <climits>
using namespace std;
int main()
{
    int N, M;
    
    char chess[50][50];
    cin >> N >> M;

    char input;
    for(int y = 0 ; y < N ; y++)
    {
        for(int x = 0 ; x < M; x++)
        {
            cin >> input;
            chess[y][x] = input;
        }
    }

    int min = INT_MAX;

    for(int y = 0 ; y < N; y++)
    { 
        for(int x = 0 ; x < M; x++)
        {
            if(y > N-8 || x > M-8) 
                continue;

            int cnt1 = 0, cnt2 = 0, cnt3 = 0, cnt4 = 0;
            int sum = 0;

                for(int Y = y; Y < y + 8; Y++)
                {
                    for(int X = x; X < x + 8; X++)
                        {
                            if((((Y + X) % 2) == 1 ) && chess[Y][X] == 'W')
                                        cnt1++;
                            if((((Y + X) % 2) == 0 ) && chess[Y][X] == 'B')
                                        cnt2++;

                            if((((Y + X) % 2) == 1 ) && chess[Y][X] == 'B')
                                        cnt3++;
                            if((((Y + X) % 2) == 0 ) && chess[Y][X] == 'W')
                                        cnt4++;
                     
                        }
                } 

                sum = cnt1 + cnt2 < cnt3 + cnt4 ? cnt1+cnt2 : cnt3+ cnt4;

                if (sum < min)
                    min = sum;
        }
    }

        cout << min;

    return 0;
}
저작자표시 (새창열림)

'프로그래밍 공부 > 백준 (C++)' 카테고리의 다른 글

[C++/백준 10989번] 수 정렬하기 3 (카운팅 정렬)  (0) 2023.08.07
[C++/백준 2751번] 수 정렬하기 2  (0) 2023.08.07
[C++/백준 19532번] 수학은 비대면 강의입니다.  (0) 2023.08.03
[C++/백준 2231번] 분해합  (0) 2023.08.03
[C++/백준 2745번] 진법 변환  (0) 2023.07.27
'프로그래밍 공부/백준 (C++)' 카테고리의 다른 글
  • [C++/백준 10989번] 수 정렬하기 3 (카운팅 정렬)
  • [C++/백준 2751번] 수 정렬하기 2
  • [C++/백준 19532번] 수학은 비대면 강의입니다.
  • [C++/백준 2231번] 분해합
Rocketbabydolls
Rocketbabydolls
Rocketbabydolls
  • Rocketbabydolls
    With The Lights Out
    Rocketbabydolls
  • 전체
    오늘
    어제
    • 전체글 (182)
      • 프로그래밍 공부 (117)
        • C (16)
        • Jumping into C++ (9)
        • MFC (C++) (1)
        • 자료구조 (1)
        • 알고리즘 (1)
        • 백준 (C++) (74)
        • 핸즈온 머신러닝 2판 (6)
        • Unseen 3기 준비 (4)
        • 원티드 포텐업 게임 개발자 양성과정 2기 (4)
      • 언리얼엔진5 (61)
        • [Part1] 이득우의 언리얼 프로그래밍 (12)
        • [Part2] 이득우의 언리얼 프로그래밍 (2)
        • [Part2 복습] 이득우의 언리얼 프로그래밍 (3)
        • [Part3] 이득우의 언리얼 프로그래밍 (14)
        • [Part4] 이득우의 언리얼 프로그래밍 (0)
        • FPS 게임 1인 프로젝트 (6)
        • 각종 지식 (9)
        • 블루프린트 Paper2D 로 게임 만들기 (14)
        • 팀 프로젝트 (1)
      • 일상 (1)
      • ETC (1)
        • 맥북 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      실전 C프로그래밍 나중채
      실전C프로그래밍 실습문제
      티스토리챌린지
      언리얼엔진5
      언리얼엔진5 fps 프로젝트
      c++ 16929
      c++ 17298
      언리얼엔진
      실전 C프로그래밍 실습문제
      핸즈온 머신러닝 2판
      실전 C 프로그래밍
      ue5 절차적 맵 생성
      언리얼엔진 절차적 맵 생성
      핸즈온 머신러닝
      C언어 실습문제
      실전C프로그래밍
      c언어
      실전C프로그래밍 나중채
      실전 C프로그래밍
      오블완
    • 최근 댓글

    • 최근 글

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

    티스토리툴바