탐색 2

[JAVA] 백준 원판 돌리기

탐색+구현 문제이다. 탐색 방식은 BFS방식으로 Queue에 넣어서 방향을 검사하는 것이다. 좌표값을 Queue에 넣는 방식을 새로 소개하겠다. Queue q = new LinkedList(); q.add(new int[]{i, j, map[i][j]}); 위의 코드처럼 Queue의 자료형에 배열을 넣어주면 임의의 배열을 통째로 넣을 수 있다. 따라서 위에서는 int[] = (x, y, 비교할 해당값) 을 큐에 넣어준 것이다. 그럼 위와 같은것을 언제 사용하는가? => 이중for문을 통해서 map을 한번 다 탐색하고 나서 다시 또 그 값을 찾아가야할때. 문제의 remove를 할때 탐색을 해서 bfs나 dfs를 통해 이웃하는 숫자의 값을 지워야한다. 백트래킹 방식으로 끝부분부터 지워야 탐색을하는데 지장이 ..

(2018카카오) 자물쇠와 열쇠 Java

Lock의 약 3배크기의 그리드를 준비한다. Lock을 그리드의 중앙으로 복사한다. Key값을 각각의 Lock의 꼭짓점부터 순회한다. 더불어 Key를 회전(rotate)시키면서 탐색한다. 탐색할시에 Lock위치에 해당하는 인덱스의 값이 모두 1이어야 Lock이 딱 맞는걸로 판별된다. 위의 그림처럼 키의값이 겹치면 1이 아닌것을 return하게 된다. dfs방식 : boolean isOk값을 true냐 false냐로 판단한다. public void dfs(int[][]key, int [][] lock, int cnt) { check(key, lock, 0, 0); if(isOk) return; if(cnt >= 4) return; int[][] temp = rotate(key);//키회전시킨걸로 탐색 df..