diff --git a/source/woodi/210529_kakao_keyAndLock.md b/source/woodi/210529_kakao_keyAndLock.md new file mode 100644 index 0000000..c9029f2 --- /dev/null +++ b/source/woodi/210529_kakao_keyAndLock.md @@ -0,0 +1,124 @@ +# 카카오 blind 2020 +- 자물쇠와 열쇠 + - https://programmers.co.kr/learn/courses/30/lessons/60059 + +## 풀이 방법 +### 문제 이해하기 +- 입력 : 2차원 배열 key, 2차원 배열 lock (0은 홈, 1은 돌기) +- 출력 : lock을 열 수 있으면 true, 없으면 false +- 조건 + - key의 돌기 -> lock의 홈 딱 맞으면 열림 + - 돌기와 돌기가 만나면 안됨 + - key는 lock 영역을 벗어날 수 있음 + - key는 회전, 이동 가능 + +### 문제 접근 방법 +- 90도씩 회전한 4가지 형태의 keys list 만들기 +- key가 lock 영역을 벗어나는 것 까지 포함하는 전체 영역 map 만든다 +- key를 90도씩 회전하며 모든 map 영역을 탐색한다. +### 구현 배경 지식 +- 완전탐색 +### 접근 방법을 적용한 코드 +```java +import java.util.*; +class Solution { + static int m; + static int n; + static int size; + public boolean solution(int[][] key, int[][] lock) { + + m = key.length; + n = lock.length; + // 회전한 모든 key의 경우의 수 담기 (총 4가지) + int[][][] keys = lotatedKeys(key); + + // map 영역 정의 + size = n+2*m-2; + int[][] map = new int[size][size]; + for(int i=m-1; i test 함수 (lock 영역의 모든 값이 1이면 true 리턴) + for(int t=0; t<4; t++) { + for(int i=0; i