https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh
import java.util.Scanner;
public class Solution {
public static boolean go(int[][] array,int x,int y) {
// 좌우 방향으로 이동 가능한 통로 -> 방향전환
// 방향 전환 이후엔 다시 아래 방향으로 이동
// 바닥에 도착시 멈춘다.
int[] dxs= {0,0};
int[] dys= {-1,1}; // 좌,우
boolean [][] visited=new boolean[100][100]; // 방문체크 배열
visited[x][y]=true; // 시작점 위치 방문처리
while(x<=99) {
boolean btn=false;
if(x==99) {
break;
}
for (int i = 0; i < 2; i++) {
int nx=x+dxs[i];
int ny=y+dys[i];
if (nx>=0 && nx<=99 && ny>=0 && ny<=99 && array[nx][ny]==1 && !visited[nx][ny]) { // 좌 혹은 우방향으로 이동 가능한 경우
visited[x][y]=true;
x=nx;
y=ny;
btn=true;
break;
}
}
if (!btn) { // 좌우로 이동 불가능한 경우 -> 아래 방향으로 이동
x=x+1;
}
}
if (array[x][y]==2) { // 목적지 도착
return true;
}else { // 목적지가 아닌 곳에 도착
return false;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int test_case = 1; test_case <= 10; test_case++)
{
int T;
T=sc.nextInt();
int[][] array=new int[100][100];
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
array[i][j]=sc.nextInt();
}
}
for (int i = 0; i < 100; i++) {
if(array[0][i]==1) {
// 사다리 출발 (목적지 array[x][y]==2)
if (go(array,0,i)) {
System.out.printf("#%d %d",T,i); // 목적지에 도착한 경우
System.out.println();
break;
}
}
}
}
}
}
/*
*1. 좌우 살핀다.
*바닥에 닿기 전까지 아래 로직 반복 (x가 99일때 종료)
*2. 갈 수 있는 방향이 있는 경우
* 2.1 그 방향으로 1칸 이동
*3. 갈 수 있는 방향이 없는 경우 - 아래로 이동
*
* */
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[17413] 단어뒤집기2 in Java (0) | 2022.08.03 |
---|---|
[20291] 파일 정리 in Java (0) | 2022.08.03 |
[SWEA] 1208. Flatten (0) | 2022.08.02 |
[4396] 지뢰찾기 in Java (0) | 2022.08.01 |
[20546] 기적의 매매법 in Java (0) | 2022.07.29 |