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이므로)
왼쪽이나 오른쪽으로 이미 이동 후 위로갈지말지 판단.