grid 4

[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를 통해 이웃하는 숫자의 값을 지워야한다. 백트래킹 방식으로 끝부분부터 지워야 탐색을하는데 지장이 ..

[JAVA] 백준 마법사 상어와 파이어볼

이틀만에 성공했다... grid는 x,y를 row col을 이처럼 적용해야된다. 보통 (r,c)로 주어지니 (y,x)로 받아야한다!! 우선 아래 코드에서는 x,y값을 반대로 적용했다. 그래서 문제 푸는내내 계속 헷갈렸다. 가장 큰 실수는 잘못된 부분은 아래에 정리하겠다. import java.util.*; class Main { public static int N, M, K; public static ArrayList fireball; public static int[] dx = {-1, -1, 0, 1, 1, 1, 0, -1}; public static int[] dy = {0, 1, 1, 1, 0, -1, -1, -1}; public static void main(String[] args) { Sca..

(2021카카오) 프렌즈4블록 Java

다음은 코드의 변수선언 설명이다. 기본 board 를 2차원 배열로 변환한 배열=> grid[m][n] 한 시행으로 동시에 삭제해야될 것들 위치 저장할 배열 => check[m][n] 1. board배열을 2차원배열로 변환한다. 2. 우선 (i,j)의 위치에서 (i,j+1),(i+1,j),(i+1,j+1)에 있는 것과 일치하면 check배열에 true로 위치를 기록한다. 3. 다음은 check배열을 순회하는데, 각 열별로 순회를하면서 지우지않아도 되는값만을 Queue에 넣어서 저장해놓는다. 동시에 check=true인 부분은 answer++를 해준다. 4. 저장해놓은 Queue를 poll()하면서 배열을 아래부터 채워올라오고, Queue.size()가 0이면 그부분부터 윗부분까지는 '@'로 채워준다. 5..

(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..