[swexpert] 8382. 방향전환 (구현, java)
728x90
반응형
상하 와 좌우를 번갈아 이동해야된다.
visited 배열을 3차원으로 사용했다. 마지막은 인덱스는 가로, 세로 중 어디로 이동했냐를 가르킨다.
테스트케이스 45개만 통과되는 경우 시작점 = 도착점으로 주어져서 답이 0인 것을 처리해주지 않아서 그렇다.
예외로 0을 출력하도록 구현하면 된다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Pos{
int x,y,dir;
public Pos(int x,int y,int dir) {
super();
this.x = x;
this.y = y;
this.dir=dir;
}
}
public class Solution {
static int t;
static int y,x,y2,x2;
static int[][] map;
static int[] rpos= {-1,1,0,0};//상 하 좌우
static int[] cpos= {0,0,-1,1};
static boolean[][][] vis;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
t=sc.nextInt();
for (int tc = 1; tc <=t; tc++) {
map=new int[201][201];
vis=new boolean[201][201][2];
x=sc.nextInt()+100;
y=sc.nextInt()+100;
x2=sc.nextInt()+100;
y2=sc.nextInt()+100;
if(x==x2 && y==y2) {
System.out.printf("#%d %d\n",tc,0);
continue;
}
Queue<Pos> q=new LinkedList<Pos>();
for (int i = 0; i < 4; i++) {
int yy=y+cpos[i];
int xx=x+rpos[i];
if(xx<0 || yy<0 || xx>=201 || yy>=201)continue;
if(i==0 || i==1) {
vis[xx][yy][0]=true;//상하
q.add(new Pos(xx,yy,0));
}else {
vis[xx][yy][1]=true;
q.add(new Pos(xx,yy,1));
}
}
int answer=0;
boolean isFinished=false;
while(q.size()!=0) {
if(isFinished)break;
int len=q.size();
for (int p = 0; p < len; p++) {
Pos cur=q.poll();
int y=cur.y;
int x=cur.x;
int dir=cur.dir;
if(y==y2 && x==x2) {
isFinished=true;
break;
}
int sx=2;
int sy=4;
if(dir==1) {//위아래 이동시키기
sx=0;
sy=2;
}
for (int k = sx; k < sy; k++) {
int yy=y+cpos[k];
int xx=x+rpos[k];
if(xx<0 || yy<0 || xx>200 || yy>200) {
continue;
}
if(vis[xx][yy][1-dir])continue;
vis[xx][yy][1-dir]=true;
q.add(new Pos(xx,yy,1-dir));
}
}
answer+=1;
}
System.out.printf("#%d %d\n",tc,answer);
}
}
}
728x90
반응형
'swexpert' 카테고리의 다른 글
[swexpert] 2112. 보호 필름 (dfs, 완탐, java) (0) | 2021.04.20 |
---|---|
[swexpert] 5607. 조합 (페르마의 정리, 재귀, java) (0) | 2021.04.19 |
[swexpert] 1953. 탈주범 검거 (java, bfs) (0) | 2021.04.15 |
[swexpert] 5656. 벽돌깨기 (java, bfs) (0) | 2021.04.14 |
[swexpert] 2819. 격자판의 숫자 이어붙이기 (java,bfs ) (0) | 2021.04.13 |
TAGS.