[백준] 1018. 체스판 다시 칠하기
2023. 7. 24. 10:14ㆍ코딩테스트/백준
[문제]
https://www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
[풀이]
<내 잘못>
*문제를 제대로 안 읽는 바람에 생각보다 문제를 푸는데 오래 걸렸고, 코드를 한 번 뒤집어 엎었다.
*n이 x축의 값이라고 헷갈리는 바람에 시간이 더 오래 걸렸다.
<코드설명>
코드의 구조를 설명하자면
0. min = 가장 작은 값, sum
1. a에 동적할당을 통해 문자를 집어넣었고
2. while문을 통해 아래와 같은 순서로 8*8개씩 검사하여 가장 작은 것을 고를 수 있도록 설정함
[코드]
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, m, i = 8, j = 7, min = 100;
int** a;
char s[50];
scanf("%d %d", &n, &m);
a = (int**)malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++) //2차원 동적할당
a[i] = (int*)malloc(sizeof(int) * m);
for (int i = 0; i < n; i++) {
scanf("%s", s);
for (int j = 0; j < m; j++) {
a[i][j] = s[j];
}
}
while (i>=0)
{
int sum = 0; //W먼저 바둑알을 놓는 경우
j++;
for (int x = i - 8; x < i; x++) {
for (int y = j - 8; y < j; y++)
{
if (x % 2 == 0 && y % 2 == 0) {
if (a[x][y] != 'W')
sum++;
}
else if (x % 2 == 0 && y % 2 != 0) {
if (a[x][y] != 'B')
sum++;
}
else if (x % 2 != 0 && y % 2 == 0) {
if (a[x][y] != 'B')
sum++;
}
else if (x % 2 != 0 && y % 2 != 0) {
if (a[x][y] != 'W')
sum++;
}
}
}
if (sum < min) //이때의 최솟값이 min보다 작다면
min = sum;
sum = 0; //B먼저 바둑알을 놓는 경우
for (int x = i - 8; x < i; x++) {
for (int y = j - 8; y < j; y++)
{
if (x % 2 == 0 && y % 2 == 0) { //B가 있어야 할 자리에
if (a[x][y] != 'B') //B가 없다면
sum++; //sum을 1 더하라
}
else if (x % 2 == 0 && y % 2 != 0) {
if (a[x][y] != 'W')
sum++;
}
else if (x % 2 != 0 && y % 2 == 0) {
if (a[x][y] != 'W')
sum++;
}
else if (x % 2 != 0 && y % 2 != 0) {
if (a[x][y] != 'B')
sum++;
}
}
}
if (sum < min) //이때의 최솟값이 min보다 작다면
min = sum;
if (i == n && j == m) //i와 j가 마지막이면 반복문을 빠져나가라
break;
if (j == m) { //j가 m까지 갔다면
j = 7; //밑의 줄을 다시 처음부터 계산하자
i++;
}
}
printf("%d", min);
for (int i = 0; i < n; i++)
free(a[i]);
free(a);
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 11650] 좌표 정렬하기 C언어 (0) | 2024.01.24 |
---|---|
[백준 10866] 덱 C언어 (1) | 2024.01.23 |
[19532] 수학은 비대면강의입니다 (0) | 2023.07.20 |
[백준] 24262. 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2023.07.19 |
[백준]5622. 다이얼 (0) | 2023.07.19 |