C언어/백준

1018번

twoweeks-within 2024. 11. 26. 22:08

임의로 8*8 을 자르고 그 중 제일 색칠할칸이 적은 값을 출력

결국 1*1 도 정사각형이라 칸의 수를 출력하면됨

 

 

1. 8*8 정사각형으로 자르려면 최소 8칸은 남아 있어야함

남은게 8칸 미만일시 실행x , 

 for (int i = 0; i <= N - 8; i++) {
        for (int j = 0; j <= M - 8; j++) {

2. 자른 정사각형이 체스판형태가 아니라면 칠해야함 

 

0 1 2 3 4 5 6 7 // 8칸

 

첫번째) 좌상단이 W 인경우 >  짝수 W, 홀수 B

// 첫번째 좌상단 W
if ((x + y) % 2 == 0) {
    if (board[i + x][j + y] != 'W') paint1++;
} else {
    if (board[i + x][j + y] != 'B') paint1++;
}

// 두번째 좌상단 B
if ((x + y) % 2 == 0) {
    if (board[i + x][j + y] != 'B') paint2++;
} else {
    if (board[i + x][j + y] != 'W') paint2++;
}

 

짝수가 Black 이면 W가 아니므로 칠해야 하므로 ++ 

홀수가 White 이면 B 가 아니므로 칠해줘야함 ++

 

두번째) 짝수가 B 일때 > paint 2 ++

 

 

int min_paint = 64;  // 최대 색칠해야할 칸은 64칸, 초기값은 최대값으로 설정

if (paint1 < min_paint) min_paint = paint1;
if (paint2 < min_paint) min_paint = paint2;

 

각 8x8 영역에서 두 패턴(좌상단 W, 좌상단 B) 중 더 적게 색칠하는 패턴을 선택

 >  그 중 최솟값을 min_paint에 저장

 

출력: min_paint

 

// 임의로 8*8 로 자르고 그안에서 제대로된 체스판 하나만 있다면 최솟값은 0 이 나옴

'C언어 > 백준' 카테고리의 다른 글

FIFO 메모리관리  (0) 2024.11.24
2789번, 2231번  (0) 2024.11.23
5073번, 14215번  (0) 2024.11.21
2581번, 11653번, 1085번, 3009번  (0) 2024.11.20
2869번, 5086번, 2501번, 9506번, 1978번  (0) 2024.11.19