-
5주차 카카오문제(자물쇠와 열쇠)old/Algorithm 2020. 7. 12. 20:10728x90
#include <string> #include <vector> #include <iostream> using namespace std; bool solution(vector<vector<int>> key, vector<vector<int>> lock) { bool answer = true; int key_M = key.size(); int lock_N = lock.size(); int zero_count = 0; // 홈 갯수 카운트 + map 확장 vector<vector<int>> widen(lock_N + (key_M-1) * 2, vector<int> (lock_N + (key_M-1) * 2, 1)); // 모두 1로 초기화 for(int i = 0; i < lock_N; i++){ for(int j = 0; j < lock_N; j++){ if(lock[i][j] == 0){ zero_count++; } widen[key_M-1 + i][key_M-1 + j] = lock[i][j]; } } vector<vector<vector<int>>> key_list; key_list.push_back(key); for(int rotation = 0; rotation < 3; rotation++){ vector<vector<int>> temp(key_M, vector<int> (key_M)); for(int a = 0; a < key_M; a++){ for(int b = 0; b < key_M; b++){ temp[b][key_M-a-1] = key_list[key_list.size() - 1][a][b]; } } key_list.push_back(temp); } for(int type = 0; type < 4; type++){ for(int i = 0; i < widen.size() - (key_M-1); i++){ for(int j = 0; j < widen.size() - (key_M-1); j++){ int cur_zeros = 0; for(int k = 0; k < key_M; k++){ for(int l = 0; l < key_M; l++){ if(key_list[type][k][l] == 1 && widen[i + k][j + l] == 0){ cur_zeros++; } if(key_list[type][k][l] == 1 && widen[i + k][j + l] == 1 && !(i + k < key_M || j + l < key_M || i + k > (widen.size() - key_M) || j + l> (widen.size() - key_M))){ cur_zeros = 0; continue; } } } if(cur_zeros == zero_count){ return true; } } } } // for(int i = 0; i < widen.size(); i++){ // for(int j = 0; j < widen.size(); j++){ // cout << widen[i][j] << " "; // } // cout << "\n"; // } return false; }
이것도 규칙대로만 하면되는데 코드가 좀 지저분한 감이 없지 않아있다.
그래도 코테 연습을 계속했더니, 지저분한 코드도 나름 감당이 된다~!
'old > Algorithm' 카테고리의 다른 글
6주차 후기(레벨 2가 너무 어려워요) (0) 2020.07.17 5주차 - 카카오 가사검색 문제 (0) 2020.07.12 5주차 - 카카오 문제 (괄호변환) (0) 2020.07.12 5주차 - 카카오 문제 ( 문자열 압축문제) (0) 2020.07.06 4주차 6월22일 - 6월28일 (0) 2020.06.22