반응형
[C++][BOJ] 1018 체스판 다시 칠하기
문제
https://www.acmicpc.net/problem/1018
풀이
Brute Force를 이용하여 풀었습니다.
우선, 8*8 체스판 두 종류를 먼저 만들어 놓은 후 입력받은 체스판 chess[N][M]에서 N-7, M-8 까지 몇 개씩 바꿔야 하는지 비교해봅니다. 이 때, algorithm.h를 활용하여 min값을 구합니다.
자꾸 런타임에러가 나서 이것때문에 3시간을 헤맸는데 count함수에서 blackFirst, whiteFirst체스판 시작범위를 잘못적어놓았네요.....ㅠㅠ
코드
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <iostream> #include <string> #include <algorithm> using namespace std; const int MAX = 50; string chess[MAX]; int N, M; string whiteFirst[8] = { {"WBWBWBWB"}, {"BWBWBWBW"}, {"WBWBWBWB"}, {"BWBWBWBW"}, {"WBWBWBWB"}, {"BWBWBWBW"}, {"WBWBWBWB"}, {"BWBWBWBW"} }; string blackFirst[8] = { {"BWBWBWBW"}, {"WBWBWBWB"}, {"BWBWBWBW"}, {"WBWBWBWB"}, {"BWBWBWBW"}, {"WBWBWBWB"}, {"BWBWBWBW"}, {"WBWBWBWB"} }; int countWhiteFirst(int y, int x) { int cnt = 0; //y,x에서 +8까지 바꿔야하는 수를 count. for (int i = y; i < y + 8; i++) { for (int j = x; j < x + 8; j++) { if (chess[i][j] != whiteFirst[i-y][j-x]) { cnt++; } } } return cnt; } int countBlackFirst(int y, int x) { int cnt = 0; //y,x에서 +8까지 바꿔야하는 수를 count. for (int i = y; i < y + 8; i++) { for (int j = x; j < x + 8; j++) { if (chess[i][j] != blackFirst[i-y][j-x]) { cnt++; } } } //return cnt return cnt; } int main() { cin >> N >> M; for (int i = 0; i < N; i++) { cin >> chess[i]; } int result = 99999999; for (int i = 0; i+7 < N; i++) { for (int j = 0; j+7 < M; j++) { result = min(result, min(countWhiteFirst(i,j), countBlackFirst(i,j))); } } cout << result <<endl; return 0; } | cs |
반응형
'Language > C++' 카테고리의 다른 글
[BOJ][C++] 11729 하노이 탑 이동 순서 (2) | 2018.12.19 |
---|---|
[BOJ][C++] 1436 영화감독 숌 (0) | 2018.12.17 |
[BOJ][C++] 2839 설탕옮기기 (0) | 2018.12.12 |
[C++][오류] 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. (0) | 2018.12.11 |
[C++] BOJ 컴파일 에러 이유와 해결방법 (0) | 2018.12.11 |
댓글