728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ง๐ป๐ปํ์ด ๊ณผ์
๐2630๋ฒ ๋ฌธ์ ์ ์ ์ฌํ๊ฒ ํ ์ ์์ต๋๋ค.
์ ์ฒด 2์ฐจ์ ๋ฐฐ์ด์ image๋ผ๊ณ ํ๊ณ , ํ์ฌ ํ์ ์ค์ธ ์ฌ๊ฐํ ์์ญ์ ์ ์ผ ์ผ์ชฝ ์ ์์์ ์ (rowBegin, colBegin)์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
- \(N \times N \) ํฌ๊ธฐ๋ถํฐ ์์ํ์ฌ Top-down์ผ๋ก ๋ด๋ ค ๊ฐ๋ค.
- N == 1์ด๋ผ๋ฉด, ์ ๋ต ๋ฌธ์์ด์ ํ์ฌ ์๊น(image[rowBegin][colBegin])์ ์ถ๊ฐํ๊ณ ์ข ๋ฃํ๋ค.
- N != 1์ด๋ผ๋ฉด, ํ์ฌ ์ฌ๊ฐํ ์์ญ์ด ๋ชจ๋ ๊ฐ์ ์๊น์ธ์ง ํ์
ํ์ฌ ์์ถ์ด ๊ฐ๋ฅํ์ง ์์๋ณธ๋ค.
- ์์ถ์ด ๊ฐ๋ฅํ๋ค๋ฉด, ์ ๋ต ๋ฌธ์์ด์ ํ์ฌ ์ฌ๊ฐํ ์์ญ์ ์๊น์ ์ถ๊ฐํ๊ณ ์ข ๋ฃํ๋ค.
- ํ์ฌ ์ฌ๊ฐํ ์์ญ์ด ๋ชจ๋ ๊ฐ์ ์์ด ์๋๋ผ๋ฉด, ์ ๋ต ๋ฌธ์์ด์ '('์ ์ถ๊ฐํ๋ค.
- N = N / 2๋ฅผ ์ ์ฉํ๋ค.
- ํ์ฌ ์ฌ๊ฐํ์ ๋ค์ 4๋ฑ๋ถํ์ฌ, rowBegin๊ณผ colBegin์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐฑ์ ํ์ฌ ์ฌ๊ท๋ฅผ ์์ํ๋ค.
- ์ผ์ชฝ ์ : (rowBegin, colBegin)
- ์ค๋ฅธ์ชฝ ์ : (rowBegin, colBegin + N)
- ์ผ์ชฝ ์๋ : (rowBegin + N, colBegin)
- ์ค๋ฅธ์ชฝ ์๋ : (rowBegin + N, colBegin + N)
- ์ ๋ต ๋ฌธ์์ด์ ')'์ ์ถ๊ฐํ๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <iostream>
#include <vector>
#include <string>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
const char UNCOMPRESSIBLE = '?';
char IsAvailableCompress(const vector<string>& image, int N, int rowBegin, int colBegin)
{
char color = '?';
for (int row = rowBegin; row < rowBegin + N; row++)
{
for (int col = colBegin; col < colBegin + N; col++)
{
if (row == rowBegin and col == colBegin)
{
color = image[row][col];
continue;
}
if (image[row][col] != color)
return UNCOMPRESSIBLE;
}
}
return color;
}
void Compress(const vector<string>& image, string& result, int N, int rowBegin, int colBegin)
{
if (N == 1)
{
result += image[rowBegin][colBegin];
return;
}
char flag = IsAvailableCompress(image, N, rowBegin, colBegin);
if (flag != UNCOMPRESSIBLE)
{
result += flag;
return;
}
result.push_back('(');
N /= 2;
Compress(image, result, N, rowBegin, colBegin); // ์ผ์ชฝ ์
Compress(image, result, N, rowBegin, colBegin + N); // ์ค๋ฅธ์ชฝ ์
Compress(image, result, N, rowBegin + N, colBegin); // ์ผ์ชฝ ์๋
Compress(image, result, N, rowBegin + N, colBegin + N); // ์ค๋ฅธ์ชฝ ์๋
result.push_back(')');
}
int main()
{
FAST_IO
int N;
cin >> N;
vector<string> bwImage(N);
for (int i = 0; i < N; i++)
cin >> bwImage[i];
string answer = "";
Compress(bwImage, answer, N, 0, 0);
cout << answer;
return 0;
}
728x90
๋ฐ์ํ
'๐คAlgorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 1629๋ฒ | ๊ณฑ์ (C++) (0) | 2023.09.01 |
---|---|
[BOJ] 1780๋ฒ | ์ข ์ด์ ๊ฐ์ (C++) (0) | 2023.08.31 |
[BOJ] 2630๋ฒ | ์์ข ์ด ๋ง๋ค๊ธฐ (C++) (0) | 2023.08.31 |
[BOJ] 11053๋ฒ | ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (C++) (0) | 2023.08.29 |
[BOJ] 25682๋ฒ | ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ 2 (C++) (0) | 2023.08.29 |