Problem Solving/SWEA

SWEA-1210 Ladder 1

채니_ 2021. 2. 6. 15:13

이동 기준 설정이 헷갈리는 문제..


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Ladder_1 {
	//구해야할것: 출발점의  x좌표
	//가는방향: 왼쪽 오른쪽 위쪽
	static int[] dr = {0,0,-1};
	static int[] dc = {-1,1,0};
	public static void main(String[] args) throws FileNotFoundException {
		System.setIn(new FileInputStream("input/ladder_1.txt"));
		Scanner sc = new Scanner(System.in);
		//테스트케이스가 10개라고 주어지고 입력과 동시에 주어질때 , 미리10번돌리고 그때그때 입력을받아서 출력.
		for (int tc = 0; tc < 10; tc++) {
			int N= sc.nextInt();
			int map[][] = new int [100][100];
			//배열입력
			for (int i = 0; i < map.length; i++) {
				for (int j = 0; j < map.length; j++) {
					map[i][j]= sc.nextInt();
				}
			}

			//마지막줄에서 맵 값이 2인지점의 r,c,좌표 찾기
			int nr =0;
			int nc =0;
			for (int r = 0; r <map.length; r++) {
				for (int c = 0; c < map.length; c++) {
					if(map[r][c]==2) {
						nr =r;
						nc =c;
					}
				}
			}
			//언제까지? row의 좌표가 0이될 때까지
			int d=2;
			while(nr!=0) {
				//왼쪽
				if(nc-1>=0 && map[nr][nc-1]==1&&d!=1) {
					d=0;
				}
				//오른쪽
				if(nc+1<100 && map[nr][nc+1]==1 &&d!=0) {
					d=1;
				}
				//위
				int nnr = nr + dr[d];
				int nnc = nc + dc[d];
				//왼쪽이나 오른쪽으로 가지 못하게 됐을때
				if(nnr>99 || nnr<0 || nnc>99 || nnc<0 || map[nnr][nnc]==0) {
					nnr -= dr[d];
					nnc -=dc[d];
					d=2;
					nnr +=dr[d];
					nnc +=dc[d];
				}
				nr = nnr;
				nc = nnc;
			}


			System.out.printf("#%d %d\n",N,nc);
		}
	}

}

 

왼쪽으로 가는경우: 왼쪽이 1이고 오른쪽으로 가던중이 아니어야함(오른쪽으로 가던중 왼쪽은 항상1이므로)

오른쪽으로 가는경우: 오른쪽이 1이고 왼쪽으로 가던중이 아니어야함(왼쪽으로 가던 중 오른쪽은 항상1이므로)

왼쪽이나 오른쪽으로 이미 이동 후 위로갈지말지 판단.