ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ฌธ์
2. ํ์ด
3. ์ฝ๋
0. ๊ฐ์
๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ. ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๊ฐ๋ฉฐ ํ์ด์ผ ํ๋ฏ๋ก, ๋ฌธ์ ๋ฅผ ๋ํ ์ผํ๊ฒ ์ ๊ฒํ์ฌ ๋ฌธ์ ์ ์๊ตฌ์กฐ๊ฑด์ ๋์น์ง ์๋๋ก ํด์ผ ํ๋ค.
1. ๋ฌธ์
https://www.acmicpc.net/problem/1018
[๋ฌธ์ ]
์ง๋ฏผ์ด๋ ์์ ์ ์ ํ์์ MN๊ฐ์ ๋จ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ M×N ํฌ๊ธฐ์ ๋ณด๋๋ฅผ ์ฐพ์๋ค. ์ด๋ค ์ ์ฌ๊ฐํ์ ๊ฒ์์์ผ๋ก ์น ํด์ ธ ์๊ณ , ๋๋จธ์ง๋ ํฐ์์ผ๋ก ์น ํด์ ธ ์๋ค. ์ง๋ฏผ์ด๋ ์ด ๋ณด๋๋ฅผ ์๋ผ์ 8×8 ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
์ฒด์คํ์ ๊ฒ์์๊ณผ ํฐ์์ด ๋ฒ๊ฐ์์ ์น ํด์ ธ ์์ด์ผ ํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, ๊ฐ ์นธ์ด ๊ฒ์์๊ณผ ํฐ์ ์ค ํ๋๋ก ์์น ๋์ด ์๊ณ , ๋ณ์ ๊ณต์ ํ๋ ๋ ๊ฐ์ ์ฌ๊ฐํ์ ๋ค๋ฅธ ์์ผ๋ก ์น ํด์ ธ ์์ด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ด ์ ์๋ฅผ ๋ฐ๋ฅด๋ฉด ์ฒด์คํ์ ์์น ํ๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง๋ฟ์ด๋ค. ํ๋๋ ๋งจ ์ผ์ชฝ ์ ์นธ์ด ํฐ์์ธ ๊ฒฝ์ฐ, ํ๋๋ ๊ฒ์์์ธ ๊ฒฝ์ฐ์ด๋ค.
๋ณด๋๊ฐ ์ฒด์คํ์ฒ๋ผ ์น ํด์ ธ ์๋ค๋ ๋ณด์ฅ์ด ์์ด์, ์ง๋ฏผ์ด๋ 8×8 ํฌ๊ธฐ์ ์ฒด์คํ์ผ๋ก ์๋ผ๋ธ ํ์ ๋ช ๊ฐ์ ์ ์ฌ๊ฐํ์ ๋ค์ ์น ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ๋น์ฐํ 8*8 ํฌ๊ธฐ๋ ์๋ฌด๋ฐ์๋ ๊ณจ๋ผ๋ ๋๋ค. ์ง๋ฏผ์ด๊ฐ ๋ค์ ์น ํด์ผ ํ๋ ์ ์ฌ๊ฐํ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
[์ ๋ ฅ]
์ฒซ์งธ ์ค์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. N๊ณผ M์ 8๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋ณด๋์ ๊ฐ ํ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. B๋ ๊ฒ์์์ด๋ฉฐ, W๋ ํฐ์์ด๋ค.
[์ถ๋ ฅ]
์ฒซ์งธ ์ค์ ์ง๋ฏผ์ด๊ฐ ๋ค์ ์น ํด์ผ ํ๋ ์ ์ฌ๊ฐํ ๊ฐ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
[์์ ์ ๋ ฅ 1]
8 8
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBBBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
[์์ ์ถ๋ ฅ 1]
1
[์์ ์ ๋ ฅ 2]
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB
[์์ ์ถ๋ ฅ 2]
12
[์์ ์ ๋ ฅ 3]
8 8
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
[์์ ์ถ๋ ฅ 3]
0
[์์ ์ ๋ ฅ 4]
9 23
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBW
[์์ ์ถ๋ ฅ 4]
31
[์์ ์ ๋ ฅ 5]
10 10
BBBBBBBBBB
BBWBWBWBWB
BWBWBWBWBB
BBWBWBWBWB
BWBWBWBWBB
BBWBWBWBWB
BWBWBWBWBB
BBWBWBWBWB
BWBWBWBWBB
BBBBBBBBBB
[์์ ์ถ๋ ฅ 5]
0
[์์ ์ ๋ ฅ 6]
8 8
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBBBWBW
WBWBWBWB
BWBWBWBW
WBWBWWWB
BWBWBWBW
[์์ ์ถ๋ ฅ 6]
2
[์์ ์ ๋ ฅ 7]
11 12
BWWBWWBWWBWW
BWWBWBBWWBWW
WBWWBWBBWWBW
BWWBWBBWWBWW
WBWWBWBBWWBW
BWWBWBBWWBWW
WBWWBWBBWWBW
BWWBWBWWWBWW
WBWWBWBBWWBW
BWWBWBBWWBWW
WBWWBWBBWWBW
[์์ ์ถ๋ ฅ 7]
15
2. ํ์ด
ํ์ด๋ฅผ ์์ํ๊ธฐ ์ ์
fgets ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค. ๋ค๋ง, fgetsํจ์๋ ์์ ๋ง์ ๋ ํนํ ํน์ง์ด ์์ด, ์ด ๋ถ๋ถ์ ์ง๊ณ ๋์ด๊ฐ์ผ ํจ์๋ฅผ ์ด์ฉํ ๋ ํค๋งค์ง ์๋๋ค. fgets ํจ์์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค. (๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋, ์๋์ชฝ ๊ธ์ ์ฝ์.)
fgets ํจ์์ ํน์ง
1. ๊ฐํ(=newline)(='\n') ํน์ ํ์ผ๋(=EOF)์ ๋ง๋ ๋๊น์ง, ํด๋น stream์ buffer์์ ๋ฌธ์์ด์ ์ฝ์ด ๋ค์ธ๋ค.
(๊ฐํ(=newline)(='\n') ํน์ ํ์ผ๋(=EOF)์ ๋ง๋๋ฉด, ์ ๋ ฅ์ด ์ข ๋ฃ๋๋ค.)
2. ๋ฌธ์์ด์ ์ฝ์ด ๋ค์ธ ํ, ๋ฌธ์์ด ๋์ NULL(='\0')๊ฐ์ด ์๋์ผ๋ก ์ถ๊ฐ๋๋ค.
3. fgets๋ gets์ ๋ฌ๋ฆฌ, ๊ฐํ(=newline)(='\n')์ด ํฌํจ๋ ์ฑ ์ ์ฅ๋๋ค.
๋ฌธ์ ํ์ด
/* Input */
๋ฌธ์ ์ ์ ๋ ฅ๊ฐ์ธ N๊ณผ M์ ์ ๋ ฅ๋ฐ๋๋ค. ์ด๋, N๊ณผ M์ ์ ๋ ฅ๋ฐ์ ํ ํ์ฐ์ ์ผ๋ก '\n'(=๊ฐํ)(=Newline)์ด ์ ๋ ฅ๋๋ฏ๋ก, ์ ๋ ฅ๋ฒํผ์๋ '\n'์ด ์กด์ฌํ๊ฒ ๋๋ค. ∴ getcharํจ์์ ํธ์ถ์ ํตํด '\n'์ ์ ๋ ฅ๋ฒํผ์์ ์ง์์ฃผ์ด์ผ ํ๋ค.
/* 2์ฐจ์ ๋ฐฐ์ด ๋์ ํ ๋น */
C์ธ์ด์์ 2์ฐจ์ ๋ฐฐ์ด์ ๋์ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ์๋ ์ฝ๋์ ๊ฐ๋ค.
์ด๋, '\n'๊ณผ '\0'๋ฌธ์๊ฐ ๋ค์ด์ฌ ๊ฒ์ ๋๋นํ์ฌ ๊ฐ๋ก์ ๊ธธ์ด๋ฅผ M+2๋ก ์ ์ธํ๋ค.
/* Input */
fgets ํจ์๋ฅผ ํตํด W์ B๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ๋๋ค.
/* ์ฒด์คํ ์ฒดํฌ */
๋ฌธ์ ์ ํต์ฌ ํํธ. ์ฝ๋๊ฐ ๊ธด Version๊ณผ ๊ฐ๋ตํ Version 2๊ฐ์ง๋ฅผ ๊ธฐ์ ํด ๋์๋ค. (์๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์.)
ํต์ฌ์์ด๋์ด๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ฒด์คํ์ ๋ชจ์(ํจํด)์ ๋ค์์ 2๊ฐ์ง ๊ฒฝ์ฐ๋ง ์กด์ฌํ๋ค.
[โ ์๊น์ด W๋ก ์์ํ๋ ๊ฒฝ์ฐ(W_start)]
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
[โก ์๊น์ด B๋ก ์์ํ๋ ๊ฒฝ์ฐ(B_start)]
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
∴ ์ ๋ ฅ๋ฐ์ ์ฒด์คํ์ 8x8์ ํฌ๊ธฐ๋ก ์๋ฅธ ํ, ์ ํจํด๊ณผ ๋ค๋ฅธ ๋ถ๋ถ์ ๊ฐ์๋ฅผ ๊ฐ๊ฐ ๊ณ์ฐํ ๋ค์(W_start์ธ ๊ฒฝ์ฐ์ B_start์ธ ๊ฒฝ์ฐ), ๋ ์ค ์ต์๊ฐ์ ๊ตฌํ๋ฉด ๋๋ค.
/* ์ถ๋ ฅ */
์ ๋ ฅ๋ฐ์ ์ฒด์คํ์ 8x8์ ํฌ๊ธฐ๋ก ์๋ฅธ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ๊ฐ๊ฐ์ ์ต์๊ฐ์ ๊ตฌํ ํ, ๊ฐ๊ฐ์ ์ต์๊ฐ๋ค์ ๋ํด ์ต์๊ฐ์ ๊ตฌํด ์ถ๋ ฅํ๋ฉด ๋๋ค. (์ฌ๊ธฐ์ ํด๋นํ๋ ๊ฐ์ด min_num ์ด๋ค.)
3. ์ฝ๋
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // ์ต๋๊ฐ, ์ต์๊ฐ ์ ์.
#define min(a,b) (((a) > (b)) ? (b) : (a))
int main(int argc, char* argv[]) {
/* Input */
int N, M; scanf("%d %d", &N, &M); //N์ ์ธ๋ก, M์ ๊ฐ๋ก.
getchar(); //'\n'์ ์
๋ ฅ๋ฒํผ์์ ์ง์.
/* 2์ฐจ์ ๋ฐฐ์ด ๋์ ํ ๋น */
char** arr = (char**)calloc(N, sizeof(char*));
for (int i = 0; i < N; i++)
arr[i] = (char*)calloc(M+2, sizeof(char)); //'\n'๊ณผ '\0' ๊ณ ๋ ค.
/* Input */
for (int i = 0; i < N; i++)
fgets(arr[i], (M + 2) * sizeof(char), stdin);
//sizeof(arr[i])๋ฅผ ํ๋ฉด, arr[i] = intํ ์ฑ๊ธ ํฌ์ธํฐ ํฌ๊ธฐ์ธ 8์ด ๋ฐํ๋๋ค.
/* ์ฒด์คํ ์ฒดํฌ */
int min_num = INT_MAX;
for (int col = 0; col <= N - 8; col++) {
for (int row = 0; row <= M - 8; row++) {
int W_start = 0, B_start = 0;
/* 8 x 8 ํฌ๊ธฐ์ ์ฒด์คํ ์ฒดํฌ */
for (int i = col; i < col + 8; i++) {
for (int j = row; j < row + 8; j++) {
/* ์ธ๋ก ์ธ๋ฑ์ค ์ง์ */
if (i % 2 == 0) {
/* ๊ฐ๋ก ์ธ๋ฑ์ค ์ง์ */
if (j % 2 == 0) {
if (arr[i][j] != 'W') W_start++;
if (arr[i][j] != 'B') B_start++;
}
/* ๊ฐ๋ก ์ธ๋ฑ์ค ํ์ */
else if (j % 2 == 1) {
if (arr[i][j] != 'B') W_start++;
if (arr[i][j] != 'W') B_start++;
}
}
/* ์ธ๋ก ์ธ๋ฑ์ค ํ์ */
else if (i % 2 == 1) {
/* ๊ฐ๋ก ์ธ๋ฑ์ค ์ง์ */
if (j % 2 == 0) {
if (arr[i][j] != 'B') W_start++;
if (arr[i][j] != 'W') B_start++;
}
/* ๊ฐ๋ก ์ธ๋ฑ์ค ํ์ */
else if (j % 2 == 1) {
if (arr[i][j] != 'W') W_start++;
if (arr[i][j] != 'B') B_start++;
}
}
}
}
min_num = min(min_num, min(W_start, B_start));
}
}
/* ์ถ๋ ฅ */
printf("%d", min_num);
/* ๋ง๋ฌด๋ฆฌ */
for (int i = 0; i < N; i++)
free(arr[i]);
free(arr);
return 0;
}
/* '8 x 8 ํฌ๊ธฐ์ ์ฒด์คํ ์ฒดํฌ' ํํธ ๊ฐ๋ตํ Ver. */
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // ์ต๋๊ฐ, ์ต์๊ฐ ์ ์.
#define min(a,b) (((a) > (b)) ? (b) : (a))
int main(int argc, char* argv[]) {
/* Input */
int N, M; scanf("%d %d", &N, &M); //N์ ์ธ๋ก, M์ ๊ฐ๋ก.
getchar(); //'\n'์ ์
๋ ฅ๋ฒํผ์์ ์ง์.
/* 2์ฐจ์ ๋ฐฐ์ด ๋์ ํ ๋น */
char** arr = (char**)calloc(N, sizeof(char*));
for (int i = 0; i < N; i++)
arr[i] = (char*)calloc(M + 2, sizeof(char)); //'\n'๊ณผ '\0' ๊ณ ๋ ค.
/* Input */
for (int i = 0; i < N; i++)
fgets(arr[i], (M + 2) * sizeof(char), stdin);
//sizeof(arr[i])๋ฅผ ํ๋ฉด, arr[i] = intํ ์ฑ๊ธ ํฌ์ธํฐ ํฌ๊ธฐ์ธ 8์ด ๋ฐํ๋๋ค.
/* ์ฒด์คํ ์ฒดํฌ */
int min_num = INT_MAX;
for (int col = 0; col <= N - 8; col++) {
for (int row = 0; row <= M - 8; row++) {
int W_start = 0, B_start = 0;
/* 8 x 8 ํฌ๊ธฐ์ ์ฒด์คํ ์ฒดํฌ */
for (int i = col; i < col + 8; i++) {
for (int j = row; j < row + 8; j++) {
/* ์ธ๋ก+๊ฐ๋ก ์ธ๋ฑ์ค ์ง์ */
if ((i + j) % 2 == 0) {
if (arr[i][j] != 'W') W_start++;
if (arr[i][j] != 'B') B_start++;
}
/* ์ธ๋ก+๊ฐ๋ก ์ธ๋ฑ์ค ํ์ */
else if ((i + j) % 2 == 1) {
if (arr[i][j] != 'B') W_start++;
if (arr[i][j] != 'W') B_start++;
}
}
}
min_num = min(min_num, min(W_start, B_start));
}
}
/* ์ถ๋ ฅ */
printf("%d", min_num);
/* ๋ง๋ฌด๋ฆฌ */
for (int i = 0; i < N; i++)
free(arr[i]);
free(arr);
return 0;
}
'ใโจ๏ธแดsใPS > ๋ฐฑ์ค_๋ธ๋ฃจํธํฌ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon/๋ฐฑ์ค][2798][C/C++] ๋ธ๋์ญ (0) | 2023.01.30 |
---|---|
[Baekjoon/๋ฐฑ์ค][4673][C/C++] ์ ํ ๋๋ฒ (0) | 2023.01.18 |