체스판이 같은 규격에 나올수 있는 값이 2개입니다.
1018번 - 체스판 다시 칠하기
체스판이 같은 규격에 나올수 있는 값이 2개입니다.
void WBcount(int p, int q, char startColor, char nextColor) {
int ni, nj;
int cnt = 0;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
//짝홀로 결정
ni = i + p;
nj = j + q;
if (j % 2 == 0) {
if (startColor != map[ni][nj])
cnt++;
}
else {
if (nextColor != map[ni][nj])
cnt++;
}
}
if (startColor == 'B') {
startColor = 'W';
nextColor = 'B';
}
else {
startColor = 'B';
nextColor = 'W';
}
}
if (myMin > cnt)
myMin = cnt;
}
for (int p = 0; p < m-7; p++) {
for (int q = 0; q < n-7; q++) {
WBcount(p, q, 'W', 'B');
WBcount(p, q, 'B', 'W');
}
}
안녕하세요. 글쓴이 본인입니다.
제가 곰곰히 생각을 해봤는데 체스판 시작 색이 흰색일 때, 검정색일 때 총 2가지로 구분해서 나누면 되는게 맞을까요?
말씀하신 말이 그 말인지를 잘 모르겠습니다 ㅠㅠ
네 맞아요~
시작색이 W일때랑 B일 때랑 비교하셔야 되요
그럼 위에 반복문을 케이스를 나누어서 두번 돌려보면 되겠네요. 감사합니다!
댓글을 작성하려면 로그인해야 합니다.
spring7424 2년 전
조금 코드가 복잡할 수 있습니다 ㅠ.ㅠ 실력이 부족해서 이해해주세요.
처음에 입력받은 숫자 두 개를 x,y에다가 저장한 후 그에 맞춰서 이차원 배열 board를 동적 할당으로 만들었습니다.
이후에 board를 B,W를 각각 0,1로 구분하여 이차원 배열 board에다가 입력, 저장하였습니다.
어떤 시작지점[a,b]를 설정하면 그로부터 [a+7,b+7]까지를 하나의 체스판으로 가정하고 고쳐야 하는 블록 갯수를 세면 되기 때문에
21번째, 22번째줄 for문에서 x-7,y-7로 잡고 돌렸습니다.
이후 i,j를 체스판의 시작 지점으로 잡고 i,j를 기준으로 홀수인 경우, 짝수인 경우를 나누어 64개의 블록을 검사해줍니다.
제일 처음, 즉 시작지점이 [0,0]인 경우는 answer값이 초기화가 안되어 있기 때문에 answer에다가 count를 바로 대입합니다.
이후는 count가 answer보다 작은 경우에만 answer에다가 count를 대입하였습니다.
조금 복잡하지만, 도저히 제 스스로는 무엇때문에 값이 안나오는지 모르겠습니다.
(VS에서 테스트 케이스도 여러 개 입력해봤는데, 전부 정상으로 나옵니다)
도움..부탁드립니다!