#include <string> #include <vector> #include <iostream> using namespace std; void rotate(vector<vector<int>> &key) { vector<vector<int>> temp = key; for(int i = 0; i < key.size(); i++) { for(int j = 0; j < key.size(); j++) { temp[i][j] = key[j][key.size()-1-i]; } } key = temp; } bool solution(vector<vector<int>> key, vector<vector<int>> lock) { int m = key.size(); int n = lock.size(); int hom = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(lock[i][j] == 0) { hom++; } } } for(int r = 1; r <= 4; r++) { for(int i = -n; i <= n; i++) { for(int j = -n; j <= n; j++) { bool fail = true; int cnt = 0; for(int x = 0; x < m; x++) { for(int y = 0; y < m; y++) { int nx = i + x; int ny = j + y; if(0 <= nx && nx < n && 0 <= ny && ny < n) { // 열쇠의 돌기 부분과 자물쇠의 홈 부분이 정확히 일치해야 하며 if(lock[nx][ny] == 0 && key[x][y] == 1) { cnt++; } // 열쇠의 돌기와 자물쇠의 돌기가 만나서는 안됩니다. else if(lock[nx][ny] == 1 && key[x][y] == 1) { fail = false; } } } } if(hom == cnt && fail == true) { return true; } } } rotate(key); } return false; } | cs |
'Programmers > Level 3' 카테고리의 다른 글
[프로그래머스 3] 최고의 집합 (C/C++) (0) | 2020.03.09 |
---|---|
[프로그래머스 3] 배달 (C/C++) (0) | 2020.03.09 |
[프로그래머스 3] 기둥과 보 (C/C++) (★★★) (0) | 2020.03.08 |
[프로그래머스 3] 거스름돈 (C/C++) (★) (0) | 2020.03.07 |
[프로그래머스 3] 보행자 천국 (C/C++) (0) | 2020.03.07 |