https://www.acmicpc.net/problem/18808
#include <iostream>
#include <vector>
using namespace std;
int n, m, k;
int turn;
int st_l, st_w;
struct sticker {
int x_len, y_len;
};
void rotateSticker(vector<vector<int>>& stic) {
int width = stic[0].size();
int length = stic.size();
vector<vector<int>> tmp(width, vector<int>(length));
for (int i = 0; i < length; i++) {
for (int j = 0; j < width; j++) {
tmp[j][length-1-i] = stic[i][j];
}
}
stic = tmp;
}
int attachSticker(vector<vector<int>> &nb, vector<vector<int>>& stic) {
vector<vector<int>>::iterator iter;
vector<int>::iterator it;
int nb_l = nb.size(); int nb_w = nb[0].size();
int stic_l = stic.size(); int stic_w = stic[0].size();
if (nb_l >= stic_l && nb_w >= stic_w) {
for (int start_l = 0; start_l <= nb_l - stic_l; start_l++) {
for (int start_w = 0; start_w <= nb_w - stic_w; start_w++) {
int tmp = 0;
for (int i = 0; i < stic_l; i++) { // ํ์ฌ ์ํ์์ ๋ถ์ฌ๋ณด๊ธฐ
for (int j = 0; j < stic_w; j++) {
if (nb[i + start_l][j + start_w] * stic[i][j]) { // ์ ๋ถ์ผ๋ฉด ๋ค์ ์์น ์กฐ์ฌ
tmp = 1;
break;
}
}
if (tmp) {
break;
}
}
if (!(tmp)) { // ๋ถ์์ผ๋ฉด
for (int i = 0; i < stic_l; i++) {
for (int j = 0; j < stic_w; j++) {
nb[i + start_l][j + start_w] += stic[i][j];
}
}
return 1;
}
}
}
}
if (turn--) { // ์์ง 3๋ฒ์ ์ ๋์์ผ๋ฉด
rotateSticker(stic);
if (attachSticker(nb, stic)) { // ๋๋ฆฌ๊ณ ๋ค์ ์๋
return 1;
}
else {
return -1; // ๋ถ์ผ ์ ์์
}
}
else { // ๋ถ์ผ ์ ์์
return -1;
}
return 1;
}
int remainBlock(vector<vector<int>> obj) {
int obj_l = obj.size(); int obj_w = obj[0].size();
int sum = 0;
for (int i = 0; i < obj_l; i++) {
for (int j = 0; j < obj_w; j++) {
if (obj[i][j] != 0) {
sum++;
}
}
}
return sum;
}
void printArr(vector<vector<int>> obj) {
int obj_l = obj.size(); int obj_w = obj[0].size();
for (int i = 0; i < obj_l; i++) {
for (int j = 0; j < obj_w; j++) {
cout << obj[i][j] << " ";
}
cout << endl;
}
}
int main() {
cin >> n >> m >> k;
vector<vector<int>> notebook(n, vector<int>(m));
vector<sticker> stickers(k);
vector<vector<int>>::iterator iter;
vector<int>::iterator it;
for (int i = 0; i < k; i++) { // sticker๋ฅผ ํ๋์ฉ ๋ฐ์ผ๋ฉด์
cin >> stickers[i].y_len >> stickers[i].x_len;
int x_len = stickers[i].x_len;
int y_len = stickers[i].y_len;
vector<vector<int>> one_sticker(y_len, vector<int>(x_len));
for (int j = 0; j < stickers[i].y_len; j++) {
for (int k = 0; k < stickers[i].x_len; k++) {
cin >> one_sticker[j][k];
}
}
turn = 3;
attachSticker(notebook, one_sticker);
printArr(notebook);
}
cout << remainBlock(notebook);
}
์์ง ์ฝ๋๋ฅผ ๋ณด๊ธฐ ์ข๊ฒ, ๊ฐ๊ฒฐํ๊ฒ ์ง๋ ์ฐ์ต์ด ๋ ๋ ๋ฏํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตฌํํ๋๋ฐ ์์๋ ์๊ฐ์ด ์ฝ 2์๊ฐ ์ ๋์ธ ๊ฒ์ผ๋ก ๋ณด์ ์์ง ๊ตฌํ์ด ๋๋ฆฌ๋ค.
4์ค FOR๋ฌธ์ ๋๋ฉด์ ์คํฐ์ปค๊ฐ ๋ถ์ฐฉ๋๋ ์ง ํ์ธํ์๊ณ , ์คํฐ์ปค ๋ถ์ฐฉ์ด ์๋๋ ๊ฒฝ์ฐ ์ต๋ 4๋ฒ๊น์ง ํด๋น ํจ์๋ฅผ ์คํํ์ฌ์ผํ๊ธฐ ๋๋ฌธ์ 4*N(๋ ธํธ๋ถ ํ)*M(๋ ธํธ๋ถ ์ด)*R(์คํฐ์ปค ํ)*C(์คํฐ์ปค ์ด)์ ์๊ฐ๋ณต์ก๋๊ฐ ๋์จ๋ค. ๋ํ ์ด๋ฌํ ๊ณผ์ ์ ์คํฐ์ปค๋ง๋ค ์คํํ๊ธฐ ๋๋ฌธ์ K๋ฒ ์ด ๊ณผ์ ์ ์คํํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ 4KNMRC์ด๋ฏ๋ก ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ฒ์์ ๋ฐ๋ผ ์ต๋ 1.6*10^(7) ์ด ๋์ด ์๊ฐ์ด ๋ถ์กฑํ ์ผ์ ์๋ค :> ์ฌ์ง์ด ์ด ๋ฌธ์ ์ ์๊ฐ ์ ํ์ 2์ด์ด๊ณ ๋ฉ๋ชจ๋ฆฌ๋ 512MB๋ก ๋๋ํ๊ฒ ์ฃผ์ด์ก๋ค.
๊นจ๋ฌ์ ๊ฒ
์ฐธ๊ณ : https://blog.encrypted.gg/938?category=730176
์ ๋ต ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฐ์ ์ํฌ ์ ์ ์ ์ด๋ณด์๋ค.
- cin, cout, endl ์ ์๊ฐ๋ณด๋ค ๋๋ฆฌ๋ค.
cin, cout๋ณด๋ค scanf, printf๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ซ๊ณ , cin, cout์ ์ฐ๋ ค๋ฉด
ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
์ด๋ ๊ฒ ๊ฐ์ํ์ํฌ ์๋ ์์ผ๋ ๊ทธ๋๋ ๋ ๋๋ฆฌ๋ค. ๋ํ sync_with_stdio
๋ก ๋๊ฒจ์ฃผ๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ด false๊ฐ ๋๋ฉด thread unsafe(์ฐ๋ ๋์ ์์๋ฅผ ์์ธกํ ์ ์์)ํด์ง๊ธฐ ๋๋ฌธ์ ์์์น ๋ชปํ ๊ฐ์ด ๋์ฌ ์๋ ์์ผ๋ฏ๋ก ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค.
c ํ์ค ์ ์ถ๋ ฅํจ์๋ฅผ ์ฐ์.
์๊ฐ์ ๋ ๋จ์ถ์ํค๊ณ ์ถ๋ค๋ฉด ๊ธ์ ํ๋์ฉ ์ ์ถ๋ ฅํ๋ getchar, putchar ๋ฑ์ด ๋ ๋น ๋ฅด๋ค.
- ๋ ธํธ๋ถ์ ํฌ๊ธฐ๊ฐ ์ต๋ 40์ด๊ณ ์คํฐ์ปค ํฌ๊ธฐ๊ฐ ์ต๋ 10์ผ๋ก ์๋ค.
๊ตณ์ด vector ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฐ๊ณ int ๋ฐฐ์ด์ max size๋ก ์ก์์ ์ฌ์ฉํด๋ ๋๋ค.
-
์คํฐ์ปค๊ฐ ๋ถ์ ๋ธ๋ก์ ๊ฐฏ์ ํ์ธ
๊ฐฏ์๋ฅผ ํ์ธํ ๋ ๋ณธ์ธ์ if๋ฌธ์ผ๋ก ๋ ธํธ๋ถ์ ํด๋น ์นธ์ด 1์ธ์ง ํ๋จํ์์ผ๋, ๊ทธ๋ฅ sum์ ๋ชจ๋ ๋ ธํธ๋ถ ์นธ์ ๊ฐ์ ๋ํด์ฃผ๋ฉด ๋๋ ์ผ์ด์๋ค. ์ธ๋ฐ์์ด ๋น๊ตํจ์๋ฅผ ํ๋ ๋ ์ฌ์ฉํ์๋ค.
'Algorithm ๋ฌธ์ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] BOJ 15961๋ฒ :: ํ์ ์ด๋ฐฅ (0) | 2020.04.02 |
---|---|
[c++] ๋ฐฑ์ค 18809๋ฒ : Gaaaaaaaaaarden (0) | 2020.03.26 |
[c++]๋ฐฑ์ค 17836๋ฒ : ๊ณต์ฃผ๋์ ๊ตฌํด๋ผ! (0) | 2020.03.21 |
[c++]๋ฐฑ์ค 1260๋ฒ : DFS์ BFS (0) | 2020.03.20 |
[python]๋ฐฑ์ค 17836๋ฒ : ๊ณต์ฃผ๋์ ๊ตฌํด๋ผ! (0) | 2020.03.13 |
Comment