사다리를 타서 2
가 걸리는 시작지점이 어딘지를 찾는 문제입니다.
밑에서 2
를 찾아서 올라가는 방식으로 구했습니다. 한 막대에서 출발한 가로선이 다른 막대를 가로질러서 연속하는 경우가 없기 때문에 왼쪽, 오른쪽, 위
의 순서로 방향을 봐주면서 다음 좌표를 업데이트해주면 됩니다.
import java.util.Arrays;
import java.util.Scanner;
public class Ladder1 {
static int size = 100;
private static boolean isIn(int y, int x) {
if(0<= y && y < size && 0<= x && x < size) return true;
else return false;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String output = "";
int[] dy = {0, 0, -1};
int[] dx = {1, -1, 0};
int T;
T=10;
for(int test_case = 1; test_case <= T; test_case++) {
int n = sc.nextInt();
int [][] ladder = new int[size][size];
boolean [][] checked = new boolean[size][size];
for(int i = 0; i< size;i++)
for(int j = 0; j<size;j++)
ladder[i][j] = sc.nextInt();
for(int i = 0; i<size;i++) {
if(ladder[size-1][i] == 2) {
int cy = size-1;
int cx = i;
int ny = size;
int nx = size;
while(ny != 0) {
for(int j = 0; j< 3; j++) {
ny = cy + dy[j];
nx = cx + dx[j];
if(!isIn(ny, nx)) continue;
if(ladder[ny][nx] == 1 && !checked[ny][nx]) {
cy = ny;
cx = nx;
checked[cy][cx] = true;
break;
}
}
}
output += "#" + test_case + " " + nx + "\n";
break;
}
}
}
System.out.println(output);
}
}
if(ladder[ny][nx] == 1 && !checked[ny][nx]) {
cy = ny;
cx = nx;
checked[cy][cx] = true;
break;
}
이미 왔던 길을 체크하기 위해서 checked 변수를 두어서 체크해주고, 갈 수 있는 방향만 찾으면 다른 방향을 볼 필요가 없숩니다.
D4라길래 쫄았는데 요건 D4중에 젤 쉬운 문제인거 같슴니다.
감사함니다 ^3^
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA-9229][DFS] 한빈이와 Spot Mart - Java (0) | 2020.08.03 |
---|---|
[SWEA-1223][스택] 계산기2 - Java (0) | 2020.08.02 |
[SWEA-1225][큐] 암호생성기 - Java (0) | 2020.07.30 |
[SWEA-1218][스택] 괄호 짝짓기 - Java (0) | 2020.07.30 |
[SWEA-1208] Flatten - Java (0) | 2020.07.28 |