#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

+ Recent posts