[Baekjoon] 2630λ²: μμ’ μ΄ λ§λ€κΈ°
π₯ λ¬Έμ
https://www.acmicpc.net/problem/2630
π μ€κ³
νμ¬ μμ’ μ΄μ λͺ¨λ μΉΈμ μμ΄ κ°μ§ μμΌλ©΄ 4λ±λΆν΄ λκ°λ λ¬Έμ μ΄λ€. μ¬κ·λ‘ ν΄κ²°ν λμ μκ° λ³΅μ‘λλ₯Ό κ³μ°ν΄λ³΄λ©΄, O(2^7*2^7+2^6*2^6*2^2+2^5*2^5*2^2*2^2...)=O(2^14*8)=O(2^17)μ΄λ―λ‘, μκ° μ ν 1μ΄ λ΄μ ν΄κ²°ν μ μλ€.
μ¬κ·ν¨μμ μμμ κ³Ό νμ¬ μμ’ μ΄μ λ³μ κΈΈμ΄λ₯Ό μ λ¬νλ€. μΉΈμ μμ΄ νλλΌλ λ€λ₯΄λ©΄ μλΌμΌ νκΈ° λλ¬Έμ λΉκ΅ λμμ μμμ μ μμΌλ‘ νμλ€.
νμ¬ μμ’ μ΄μ λͺ¨λ μΉΈμ νμΈνλ©΄μ λ€λ₯Έ μμ κ°μ§ μΉΈμ΄ μλ€λ©΄, 4λ±λΆν μμ’ μ΄λ₯Ό λνλ΄λ μ¬κ·ν¨μλ₯Ό μ€ννλ€.
νμ¬ μμ’ μ΄μ λͺ¨λ μΉΈμ νμΈνλ©΄μ λ€λ₯Έ μμ κ°μ§ μΉΈμ΄ μλ€λ©΄, μμμ μ μκ³Ό λͺ¨λ κ°λ€λ μλ―Έμ΄λ―λ‘, μμμ μ μμ κ°μ§ μμ’ μ΄ μλ₯Ό μ¦κ°μν¨λ€. 0μ νμμ, 1μ νλμμ΄λ€.
π νμ΄
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int n;
vector<vector<int>> paper(128, vector<int>(128));
vector<int> result(2);
void slice(int start_x, int start_y, int length){
int color = paper[start_x][start_y];
for (int i=start_x; i<start_x+length; i++){
for (int j=start_y; j<start_y+length; j++){
if (color != paper[i][j]){
slice(start_x, start_y, length/2);
slice(start_x+length/2, start_y, length/2);
slice(start_x, start_y+length/2, length/2);
slice(start_x+length/2, start_y+length/2, length/2);
return;
}
}
}
result[color] += 1;
return;
}
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n;
for (int i=0; i<n; i++){
for (int j=0; j<n; j++){
cin >> paper[i][j];
}
}
slice(0, 0, n);
cout << result[0] << "\n" << result[1] << "\n";
return 0;
}
π λ©λͺ¨
1074λ² Zμ λΉμ·ν λ¬Έμ