[Programmers] λΈλ‘ μ΄λνκΈ°(2020 KAKAO BLIND RECRUITMENT) JAVA
λ¬Έμ : λΈλ‘ μ΄λνκΈ°(2020 KAKAO BLIND RECRUITMENT)
λ¬Έμ μ€λͺ
1*2 ν¬κΈ°μ λλ‘ (2*1λ‘ νμ μ΄ κ°λ₯νλ€.)μ΄ μ§λμμ λ§νμ§ μμ κ³³μ ν΅ν΄ μμ§μΌ λ, n*n μΉΈ(μ€λ₯Έμͺ½ μλ λ§μ§λ§ μΉΈ)μΌλ‘ κ°λ μ΅μνμ μμ§μμ μΆλ ₯νλ λ¬Έμ μ
λλ€.
λλ‘ μ μ, ν, μ’, μ°λ‘ μμ§μΌ μ μκ³ κ°λ‘μμ μΈλ‘λ‘, μΈλ‘μμ κ°λ‘λ‘ νμ ν μ μλλ°, νμ ν λ λΏλ μ§λκ° λ§νμμΌλ©΄ νμ μ΄ μ λ©λλ€.(μμΈν 건 κ·Έλ¦ΌμΌλ‘ λμμμ΅λλ€.)
Solution
bfs
bfsλ‘ λλ‘ μ΄ ν μΉΈμ© μμ§μΌ λλ§λ€ λ°©λ¬Έν 거리λ₯Ό 1μ© λν΄μ£Όλ©° μ΅μ’
n*nμ λΏμμ λ μ΅μ’
κ°μ μΆλ ₯νλ©΄ λ©λλ€.
λ€λ§ λ¨μνκ² 1*1 ν¬κΈ°μ μ¬λμ΄λ μ¬λ¬Όμ΄ μμ§μ΄λ κΈ°μ‘΄μ bfs λ¬Έμ μ λ€λ₯΄κ² λ μΉΈμ μ°¨μ§νλ λλ‘ μ΄λΌ λ¬Έμ κ° λ 볡μ‘ν΄μ§λλ€.
μ λ κΈ°μ‘΄μ intν λ°©λ¬Έ λ°°μ΄μ 2μ°¨μ λ°°μ΄μ΄ μλ, 3μ°¨μ λ°°μ΄λ‘ λ§λ€μμ΅λλ€.
vis[λλ‘ μ΄ κ°λ‘λ©΄ 0, μΈλ‘λ©΄ 1][μΈλ‘ μ’ν][κ°λ‘ μ’ν]
μ΄λ μΈλ‘ μ’νμ κ°λ‘ μ’νκ° κ°λ¦¬ν€λ 1*1 ν¬κΈ°μ μ§λλ λλ‘ μ΄ κ°λ‘λ©΄ μΌμͺ½ μΉΈ
, λλ‘ μ΄ μΈλ‘λ©΄ μμͺ½ μΉΈ
μ κ°λ¦¬ν€κ² ν¨μΌλ‘μ¨ λ°©λ¬Έ μ¬λΆλ₯Ό ꡬλ³νκ² νμ΅λλ€.
λ λλ‘ μ΄ μμ§μΌ μ μμ λμ κ²½μ°μ μλ μ¬λ¬ κ°μ§ μλλ₯Ό ν΄λ΄€μ§λ§,
λλ‘ μ΄ κ°λ‘ μΌ λ - μ, ν, μ’, μ°λ‘ μμ§μ΄κ±°λ, μλ‘ νμ 2κ°μ§, μλλ‘ νμ 2κ°μ§
λλ‘ μ΄ μΈλ‘ μΌ λ - μ, ν, μ’, μ°λ‘ μμ§μ΄κ±°λ, μλ‘ νμ 2κ°μ§, μλλ‘ νμ 2κ°μ§
λ‘ μ΄ 16κ°μ§μ if λ¬Έμ λ§λ€μ΄ queueμ λ΄λ μμΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
Description
vis
λ°°μ΄μ μ μ₯νλ λ°©ν₯, μΈλ‘ μ’ν, κ°λ‘ μ’νμ μΈ κ°μ§ λ°μ΄ν°λNode
λΌλ ν΄λμ€λ₯Ό λ§λ€μ΄μ ꡬννμ΅λλ€.
μμ€μ½λ
import java.util.LinkedList;
import java.util.Queue;
class Node{
private int x;
private int y;
private int dir;
public Node(int dir, int x, int y){
this.x = x;
this.y = y;
this.dir = dir;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getDir() {
return dir;
}
}
class Solution {
public static int[][][] vis;
public static int n;
public static int inf;
public static Queue<Node> q = new LinkedList<>();
public int solution(int[][] board) {
n = board.length;
inf = n*n + 1;
vis = new int[2][n][n];
for(int i=0; i<2; i++){
for(int j=0; j<n; j++){
for(int k=0; k<n;k++){
vis[i][j][k] = inf;
}
}
}
q.offer(new Node(0,0,0));
vis[0][0][0] = 0;
while (!q.isEmpty()){
Node node = q.poll();
int dir = node.getDir();
int x = node.getX();
int y = node.getY();
int nextCnt = vis[dir][x][y] + 1;
if(dir==0){
if(y+2<n && board[x][y+2]==0 && vis[0][x][y+1]==inf){
vis[0][x][y+1] = nextCnt;
q.offer(new Node(0,x,y+1));
}
if(y-1>=0 && board[x][y-1]==0 && vis[0][x][y-1]==inf){
vis[0][x][y-1] = nextCnt;
q.offer(new Node(0,x,y-1));
}
if(x+1<n && board[x+1][y]==0 && board[x+1][y+1]==0 && vis[0][x+1][y]==inf){
vis[0][x+1][y] = nextCnt;
q.offer(new Node(0,x+1,y));
}
if(x-1>=0 && board[x-1][y]==0 && board[x-1][y+1]==0 && vis[0][x-1][y]==inf){
vis[0][x-1][y] = nextCnt;
q.offer(new Node(0,x-1,y));
}
if(x+1<n && board[x+1][y]==0 && board[x+1][y+1]==0 && vis[1][x][y+1]==inf){
vis[1][x][y+1] = nextCnt;
q.offer(new Node(1,x,y+1));
}
if(x+1<n && board[x+1][y]==0 && board[x+1][y+1]==0 && vis[1][x][y]==inf){
vis[1][x][y] = nextCnt;
q.offer(new Node(1,x,y));
}
if(x-1>=0 && board[x-1][y]==0 && board[x-1][y+1]==0 && vis[1][x-1][y+1]==inf){
vis[1][x-1][y+1] = nextCnt;
q.offer(new Node(1,x-1,y+1));
}
if(x-1>=0 && board[x-1][y]==0 && board[x-1][y+1]==0 && vis[1][x-1][y]==inf){
vis[1][x-1][y] = nextCnt;
q.offer(new Node(1,x-1,y));
}
}
else{
if(x+2<n && board[x+2][y]==0 && vis[1][x+1][y]==inf){
vis[1][x+1][y] = nextCnt;
q.offer(new Node(1,x+1,y));
}
if(x-1>=0 && board[x-1][y]==0 && vis[1][x-1][y]==inf){
vis[1][x-1][y] = nextCnt;
q.offer(new Node(1,x-1,y));
}
if(y+1<n && board[x][y+1]==0 && board[x+1][y+1]==0 && vis[1][x][y+1]==inf){
vis[1][x][y+1] = nextCnt;
q.offer(new Node(1,x,y+1));
}
if(y-1>=0 && board[x][y-1]==0 && board[x+1][y-1]==0 && vis[1][x][y-1]==inf){
vis[1][x][y-1] = nextCnt;
q.offer(new Node(1,x,y-1));
}
if(y+1<n && board[x][y+1]==0 && board[x+1][y+1]==0 && vis[0][x][y]==inf){
vis[0][x][y] = nextCnt;
q.offer(new Node(0,x,y));
}
if(y+1<n && board[x][y+1]==0 && board[x+1][y+1]==0 && vis[0][x+1][y]==inf){
vis[0][x+1][y] = nextCnt;
q.offer(new Node(0,x+1,y));
}
if(y-1>=0 && board[x][y-1]==0 && board[x+1][y-1]==0 && vis[0][x][y-1]==inf){
vis[0][x][y-1] = nextCnt;
q.offer(new Node(0,x,y-1));
}
if(y-1>=0 && board[x][y-1]==0 && board[x+1][y-1]==0 && vis[0][x+1][y-1]==inf){
vis[0][x+1][y-1] = nextCnt;
q.offer(new Node(0,x+1,y-1));
}
}
}
int answer = Math.min(vis[0][n-1][n-1-1],vis[1][n-1-1][n-1]);
return answer;
}
}
'Algorithm > Programmers' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Programmers] μ§ν μ΄λ (0) | 2022.03.16 |
---|---|
[Programmers] μλ¬Όμ μ μ΄μ (2020 KAKAO BLIND RECRUITMENT) (0) | 2022.03.15 |