-
백준(BOJ) 18808번 스티커 붙이기알고리즘 풀이/백준(Boj) 2020. 3. 28. 17:36
문제 : https://www.acmicpc.net/problem/18808
18808번: 스티커 붙이기
혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연결되어 있다. 또한 모눈종이의 크기는 스티커의 크기에 꼭 맞아서, 상하좌우에 스티커가 포함되지 않는 불필요한 행이나 열이 존재하지 않는다. 아래는 올바른 모눈종이의 예시이다. 주황색 칸은 스티커가 붙은 칸을, 하얀색 칸은 스티커가 붙지 않은 칸을 나타낸다. 반면 아래는 올바
www.acmicpc.net
풀이 :
색종이는 붙일 곳이 없다고 해서 바로 return 하지 않고 일단 색종이를 붙이고 중복된 곳이 있게 된다면
다시 -1로 덮어주어야 한다. 이 점만 주의해준다면 나머지는 돌리고 넣어보는 시뮬레이션 문제였다.
코드 ( C++ )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <iostream> #include <vector> #include <algorithm> using namespace std; int n, m, k; int A[44][44]; bool visited[44][44]; bool set(int y, int x, vector<vector<int>>& v, int dig) { int a = v.size(); int b = v[0].size(); bool check = true; for (int i = y; i < y + a; ++i) { for (int j = x; j < x + b; ++j) { if (v[i - y][j - x] == 1) { A[i][j] += dig; if (A[i][j] >= 2) check = false; } } } return check; } void rotate(vector<vector<int>>& v) { int a = v.size(); int b = v[0].size(); vector<vector<int>> temp = vector<vector<int>>(b, vector<int>(a)); for(int i=0; i <a; ++i) for (int j = 0; j < b; ++j) { temp[j][i] = v[a - 1 - i][j]; } v = temp; } int main() { cin >> n >> m >> k; while (k--) { int r, c; cin >> r >> c; vector<vector<int>> v(r, vector<int>(c)); for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) { cin >> v[i][j]; } for (int l = 0; l < 4; ++l) { bool flg = false; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (i + v.size()-1 < n && j + v[0].size()-1 < m) { if (set(i, j, v, 1)) { flg = true; } if (!flg) set(i, j, v,-1); if (flg) break; } } if (flg) break; } if (flg) break; rotate(v); } } int cnt = 0; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) if (A[i][j] == 1) cnt += 1; cout << cnt << "\n"; return 0; } '알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글
백준(BOJ) 1938번 통나무 옮기기 (0) 2020.03.30 백준(BOJ) 18809번 Gaaaaaaaaaarden (0) 2020.03.28 백준 BOJ(16637번) 괄호 추가하기 (0) 2020.03.21 백준 BOJ(1445) 일요일 아침의 데이트 (0) 2020.03.19 백준(BOJ) 알고스팟 (0) 2020.03.16