일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 독일어
- DFS
- 리눅스
- 분할정복
- 코테
- 카카오코테
- 독학
- SQLD
- sql
- SWIFT
- 롯데정보통신
- dp
- 세브란스
- 구현
- 부주상골수술
- 프로그래머스
- 백준
- 스택
- istringstream
- 부주상골증후군
- 부주상골
- 부주상골수술후기
- BFS
- ChatGPT
- 카카오인턴십
- IOS
- 독일어독학
- c++
- 코딩테스트
- 카카오인턴
Archives
- Today
- Total
슈뢰딩거의 고등어
[백준] 1018 체스판 다시 칠하기 본문
[해결방법]
체스판을 채우는 방법은 2가지임으로
2가지 케이스에 해당하는 체스판을 answer에 저장한다.
주어진 판으로 생성할수 있는 모든 8*8 판에 대해 확인한다.
answer[] 와 생성한 판과의 차이가 얼마나 나는지 확인한다.
최소 차이를 result 로 업데이트한다.
#include <iostream>
#include <cstring>
using namespace std;
int n, m;
int y, x;
string map[59];
string answer[2][10];
int result = 987654321;
void check_board(int cy, int cx) {
int case_1 = 0;
int case_2 = 0;
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
if(answer[0][i][j] != map[cy+i][cx+j])
case_1++;
if(answer[1][i][j] != map[cy+i][cx+j])
case_2++;
}
}
result = min(result, case_1);
result = min(result, case_2);
}
int main() {
scanf("%d %d", &n, &m);
for(int i=0; i<n; i++) {
cin >> map[i];
}
string a = "BWBWBWBW";
string b = "WBWBWBWB";
for(int i=0; i<8; i++){
answer[0][i] = a;
answer[1][i] = b;
string tmp = a;
a = b;
b = tmp;
}
for(int i=0; i<=n-8; i++)
for(int j=0; j<=m-8; j++)
check_board(i, j);
cout << result << endl;
}
'알고리즘' 카테고리의 다른 글
[2021 Kakao blind recruitment] 순위검색 (0) | 2022.03.22 |
---|---|
[백준] 1107 리모컨 (0) | 2022.03.20 |
[boj] 2751 수 정렬하기 2 (0) | 2022.03.19 |
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2022.03.19 |
[프로그래머스] 이진 변환 반복하기 (0) | 2022.03.17 |
Comments