[BOJ] 25682λ² | 체μ€ν λ€μ μΉ νκΈ° 2 (C++)
2023. 8. 29. 16:19γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
π§π»π»νμ΄ κ³Όμ
- κ°κ° Nν Mμ΄ ν¬κΈ°μ ν°μμΌλ‘ μμνλ 보λνκ³Ό κ²μμμΌλ‘ μμνλ 보λν λ κ°μ 2μ°¨μ λ°°μ΄μ μ€λΉν©λλ€.
- λ€μ κ³Όμ μ ν΅ν΄, κ΅μ²΄ν΄μΌ νλ νμλ₯Ό λμ νμ¬ μ μ₯ν΄ λκ°λλ€.
- λ€μμ μ¬λ°λ₯Έ 체μ€νμ λ°°μ΄μΌ κ²½μ°λ₯Ό λνλ
λλ€.
- (ν + μ΄)μ΄ μ§μμΌ κ²½μ°, μμ μκΉ(1, 1)κ³Ό κ°μμΌ νλ€.
- (ν + μ΄)μ΄ νμμΌ κ²½μ°, μμ μκΉ(1, 1)κ³Ό λ¬λΌμΌ νλ€.
- μ λ κ°μ§ μ€ νλμ ν΄λΉνμ§ μμ κ²½μ°, μκΉμ κ΅μ²΄ν΄μΌ νλ€.
- λ€μμ μ¬λ°λ₯Έ 체μ€νμ λ°°μ΄μΌ κ²½μ°λ₯Ό λνλ
λλ€.
- νκ³Ό μ΄μ κ°κ° KλΆν° μμνμ¬, κ°κ° N, Mλ³΄λ€ μκ±°λ κ°μ λκΉμ§ 2μ€ for λ¬Έμ λλ €κ°λ©° λ€μμ νμΈν©λλ€.
- K x K ν¬κΈ°μ 보λμμ μκΉ λ³κ²½ νμλ₯Ό μ»λ λ°©λ²μ π2μ°¨μ λ°°μ΄μμ λμ ν©μ μ»λ λ°©μκ³Ό κ°μ΅λλ€.
- ν°μμΌλ‘ μμνλ 보λνμμ ꡬν νμμ κ²μμμΌλ‘ μμνλ 보λνμμ ꡬν νμ μ€ μμ κ²μ μΆλ ₯νλ©΄ λ©λλ€.
βοΈμμ€ μ½λ λ° κ²°κ³Ό
#include <iostream>
#include <vector>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
using Board = vector<vector<int>>;
const char WHITE_COLOR = 'W';
const char BLACK_COLOR = 'B';
bool ShouldChangeColor(const char startColor, const char inputColor, const int row, const int col)
{
bool isEven = (row + col) % 2 == 0;
// (ν + μ΄)μ΄ μ§μλΌλ©΄, μμ μ(1, 1)κ³Ό κ°μμΌ μ¬λ°λ₯Έ 보λνμ΄ λλ€.
if (isEven && startColor == inputColor)
return false;
// (ν + μ΄)μ΄ νμλΌλ©΄, μμ μ(1, 1)κ³Ό λ¬λΌμΌ μ¬λ°λ₯Έ 보λνμ΄ λλ€.
else if (!isEven && startColor != inputColor)
return false;
return true;
}
int main()
{
FAST_IO;
int N, M, K;
cin >> N >> M >> K;
Board whiteStartBoard(N + 1, vector<int>(M + 1));
Board blackStartBoard(N + 1, vector<int>(M + 1));
for (int row = 1; row <= N; row++)
{
for (int col = 1; col <= M; col++)
{
char color;
cin >> color;
bool isChangedInWhiteBoard = ShouldChangeColor(WHITE_COLOR, color, row, col);
bool isChangedInBlackBoard = ShouldChangeColor(BLACK_COLOR, color, row, col);
// μ΄μ λμ ν© + μλ‘μ΄ κ°
whiteStartBoard[row][col] = whiteStartBoard[row - 1][col] + whiteStartBoard[row][col - 1] - whiteStartBoard[row - 1][col - 1] + isChangedInWhiteBoard;
blackStartBoard[row][col] = blackStartBoard[row - 1][col] + blackStartBoard[row][col - 1] - blackStartBoard[row - 1][col - 1] + isChangedInBlackBoard;
}
}
int answerInWhiteBoard = 1000000000;
int answerInBlackBoard = 1000000000;
for (int row = K; row <= N; row++)
{
for (int col = K; col <= M; col++)
{
int minInWhiteBoard = whiteStartBoard[row][col] - whiteStartBoard[row - K][col] - whiteStartBoard[row][col - K] + whiteStartBoard[row - K][col - K];
int minInBlackBoard = blackStartBoard[row][col] - blackStartBoard[row - K][col] - blackStartBoard[row][col - K] + blackStartBoard[row - K][col - K];
answerInWhiteBoard = min(answerInWhiteBoard, minInWhiteBoard);
answerInBlackBoard = min(answerInBlackBoard, minInBlackBoard);
}
}
cout << min(answerInWhiteBoard, answerInBlackBoard);
return 0;
}
728x90
λ°μν
'Coding Test > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 2630λ² | μμ’ μ΄ λ§λ€κΈ° (C++) (0) | 2023.08.31 |
---|---|
[BOJ] 11053λ² | κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄ (C++) (0) | 2023.08.29 |
[BOJ] 11660λ² | κ΅¬κ° ν© κ΅¬νκΈ° 5 (C++) (0) | 2023.08.29 |
[BOJ] 2559λ² | μμ΄ (C++) (0) | 2023.08.27 |
[BOJ] 16139λ² | μΈκ°-μ»΄ν¨ν° μνΈμμ© (C++) (1) | 2023.08.27 |