말랑한 하루
[SW Expert Academy] 1210 Ladder1 [Java] 본문
반응형
[ EX TestCase ]
더보기
1
1 0 0 0 1 0 1 0 0 1
1 0 0 0 1 0 1 1 1 1
1 0 0 0 1 0 1 0 0 1
1 0 0 0 1 1 1 0 0 1
1 0 0 0 1 0 1 0 0 1
1 1 1 1 1 0 1 1 1 1
1 0 0 0 1 0 1 0 0 1
1 1 1 1 1 0 1 0 0 1
1 0 0 0 1 1 1 0 0 1
1 0 0 0 1 0 1 0 0 1
[ 핵심풀이 ]
0) 사다리에서 정답을 찾아가는게아닌, 정답에서 사다리출발점을 찾아가는것
1) 사다리가 놓인줄은 처음부터 끝까지 사다리가 이어져있다는점
1-1) 사다리가 놓인줄을 알 수 있는 리스트만들기
2) 위로한칸씩올라가며 좌우에 길이있는지 확인하고 길이있다면 현재 X축 위치를 변경 (-1, +1)
3) 범위 확인 잘하기
[ 핵심소스 ]
//왼쪽이 범위에벗어나지않고, 길이 존재할때
if (x - 1 > 0 && ary[y][x - 1] == 1) {
nowidx -= 1;
x = bridge.get(nowidx);
q.add(new yx(y - 1, x));
continue;
}
//오른쪽이 범위에벗어나지않고, 길이 존재할때
if (x + 1 < 100 && ary[y][x + 1] == 1) {
nowidx += 1;
x = bridge.get(nowidx);
q.add(new yx(y - 1, x));
continue;
}
q.add(new yx(y - 1, x));
[ Java ]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
class yx {
int y;
int x;
yx(int y, int x) {
this.y = y;
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
public class _1210_Ladder1 {
static void init() throws NumberFormatException, IOException {
int ary[][] = new int[100][100];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int t = 1; t <= 10; t++) {
int TC = Integer.parseInt(br.readLine());
for (int i = 0; i < 100; i++) {
// for(int i=0;i<10;i++) {
String temp[] = br.readLine().split(" ");
for (int k = 0; k < temp.length; k++)
ary[i][k] = Integer.parseInt(temp[k]);
}
System.out.print("#"+TC+" ");
solve(ary);
}
}
static void solve(int ary[][]) {
ArrayList<Integer> bridge = new ArrayList<Integer>();
Queue<yx> q = new LinkedList<yx>();
int nowidx = 0;
for (int t = 0; t < 100; t++) {
// for(int t=0;t<10;t++) {
if (ary[99][t] == 1)
bridge.add(t);
if (ary[99][t] == 2) {
nowidx = bridge.size();
bridge.add(t);
}
}
q.add(new yx(99, bridge.get(nowidx)));
// System.out.println(bridge.get(nowidx));
while (!q.isEmpty()) {
yx out = q.poll();
int y = out.getY();
int x = out.getX();
// System.out.println(y + " " + x);
if (y == 0) {
System.out.println(x);
break;
}
if (x - 1 > 0 && ary[y][x - 1] == 1) {
nowidx -= 1;
x = bridge.get(nowidx);
q.add(new yx(y - 1, x));
continue;
}
if (x + 1 < 100 && ary[y][x + 1] == 1) {
nowidx += 1;
x = bridge.get(nowidx);
q.add(new yx(y - 1, x));
continue;
}
q.add(new yx(y - 1, x));
}
}
public static void main(String[] args) throws NumberFormatException, IOException {
init();
}
}
반응형
'문제풀이 > SWexpert Academy' 카테고리의 다른 글
[SW Expert Academy] 1873 상호의 배틀필드 [Java] (0) | 2021.02.05 |
---|---|
[SW Expert Academy] 1954 달팽이 숫자 [Java] (0) | 2021.02.02 |
[SW Expert Academy] 1860 진기의 최고급 붕어빵 [Java] (0) | 2021.02.01 |
[SW Expert Academy] 9280 진용이네 주차타워 [Java] (0) | 2021.01.31 |
[SW Expert Academy] 4366 정식이의 은행업무 [Java] (0) | 2021.01.31 |
Comments