여니의 취준 준비/코딩테스트 (Java)

[SWEA] 1210. Ladder1

여니's 2022. 8. 2. 14:31

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


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