반응형
풀이
arr에 값을 모두 넣어주고
find에 도착점인 x,y, arr를 넘겨주었습니다.
find내에서 방향 dir을 정해주고,
dir이 좌 방향일때와 우방향일땐 상 방향 먼저 탐색하고 자기 자신 방향을 탐색하게끔,
상 방향일땐 자기 자신 방향 먼저 탐색하게끔 했습니다.
import java.io.FileInputStream;
import java.io.*;
import java.lang.*;
import java.util.StringTokenizer;
public class Solution {
// 좌 상 우
static int[] dx ={0,-1,0};
static int[] dy= {-1,0,1};
//출발점 찾기!
static void find(int x, int y, int[][] arr) {
int dir=1;
while(x!=0){
if(dir==1) dir++;
else if(dir==2) dir+=2;
for(int i=0 ; i<3 ; i++) {
int nx=x+dx[(dir+i)%3];
int ny=y+dy[(dir+i)%3];
if(0<=nx && nx<100 && 0<=ny && ny<100) {
if(arr[nx][ny]==1) {
x=nx;
y=ny;
dir=(dir+i)%3;
break;
}
}
}
}
System.out.printf("%d\n",y);
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.setIn(new FileInputStream("res/input_d4_1210.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb= new StringBuilder();
int[][] arr= new int[100][100];
for(int tc=1 ; tc<=10 ; tc++) {
// 출발
int x=99;
int y=0;
br.readLine();
for(int i=0 ; i<100 ; i++) {
StringTokenizer st= new StringTokenizer(br.readLine()," ");
for(int j=0 ; j<100 ; j++) {
arr[i][j]=Integer.parseInt(st.nextToken());
if(arr[i][j]==2) {
y=j;
}
}
}
System.out.printf("#%d ",tc);
// 도착점을 넘긴다.
find(x,y,arr);
}
}
}
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Java SWEA 1247] 최적 경로 (0) | 2021.08.19 |
---|---|
[JAVA/자바 1992 백준] 쿼드트리 (0) | 2021.08.18 |
[Python/파이썬 프로그래머스] 다트게임(카카오) (0) | 2021.06.30 |
[Python/파이썬 프로그래머스] 실패율 (0) | 2021.06.29 |
[파이썬/Python 프로그래머스] 체육복 (0) | 2021.06.28 |