알고리즘/백준(BOJ)
백준 - 14500 테트로미노
시나모온
2020. 10. 15. 16:46
문제 링크입니다 : www.acmicpc.net/problem/14500
14500번: 테트로미노
폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변�
www.acmicpc.net
데이터는 논리에서 분리한다!
코드는 설계하는 원칙 중 하나이다. 그래서 노가다를 했다!
#include <iostream>
#include <vector>
using namespace std;
vector<vector<vector<int>>> tetromino = {
{
{1, 1, 1, 1}
},
{
{1},
{1},
{1},
{1}
},
{
{1, 1},
{1, 1}
},
{
{1, 1, 1},
{1, 0, 0}
},
{
{1, 1},
{0, 1},
{0, 1}
},
{
{0, 0, 1},
{1, 1, 1}
},
{
{1, 0},
{1, 0},
{1, 1}
},
{
{1, 1, 1},
{0, 0, 1}
},
{
{0, 1},
{0, 1},
{1, 1}
},
{
{1, 0, 0},
{1, 1, 1}
},
{
{1, 1},
{1, 0},
{1, 0}
},
{
{1, 0},
{1, 1},
{0, 1},
},
{
{0, 1, 1},
{1, 1, 0}
},
{
{0, 1},
{1, 1},
{1, 0},
},
{
{1, 1, 0},
{0, 1, 1}
},
{
{1, 1, 1},
{0, 1, 0}
},
{
{0, 1},
{1, 1},
{0, 1}
},
{
{0, 1, 0},
{1, 1, 1}
},
{
{1, 0},
{1, 1},
{1, 0}
}
};
int main() {
int N, M;
cin >> N >> M;
vector<vector<int>> board(N, vector<int>(M));
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
cin >> board[i][j];
}
}
int max = 0;
for(int k = 0; k < tetromino.size(); k++) {
vector<vector<int>>& block = tetromino[k];
int h = block.size();
int w = block[0].size();
for(int i = 0; i < N - h + 1; i++) {
for(int j = 0; j < M - w + 1; j++) {
int sum = 0;
for(int s = 0; s < h; s++) {
for(int t = 0; t < w; t++) {
sum += board[i + s][j + t] * block[s][t];
}
}
if(sum > max) {
max = sum;
}
}
}
}
cout << max;
return 0;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~