SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제
설명
맨 끝 행에 있는 도착 지점을 찾은 다음, 사다리를 거꾸로 올라가면서 시작점까지 올라가도록 푸는 게 핵심인 문제입니다.
while문을 반복하면서 한 칸씩 움직이다가, 0행에 다다르면 그때의 y좌표를 출력하도록 했습니다.
이때, 방문한 칸은 0으로 변경해야하고, 방향 우선순위가 '좌&우 > 위' 이기 때문에 조건문에서 '위'방향이 가장 나중에 나오게 해야 한다는 것을 주의하셔야 합니다!
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class SWEA1210_Ladder {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int i=0; i<10; i++) {
int tc = Integer.parseInt(br.readLine());
int x=0, y=0;
int[][] ladder = new int[100][100];
for(int j=0; j<100; j++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int k=0; k<100; k++) {
ladder[j][k] = Integer.parseInt(st.nextToken());
if(ladder[j][k]==2) { //도착점이면, 그때의 위치 좌표 저장
x=j; y=k;
}
}
}
//x=99. 99행(도착점)부터 0행(시작점)까지 거슬러 올라감
while(x>0) { //반복문 하나에 한 칸 움직임(좌/우/위)
ladder[x][y]=0; //방문한 칸은 0으로 변경
if(y-1>=0 && ladder[x][y-1]==1) { //좌로 갈 수 있다면
y--;
} else if(y+1<100 && ladder[x][y+1]==1) { //우로 갈 수 있다면
y++;
} else if(x-1>=0 && ladder[x-1][y]==1) { //위로 갈 수 있다면
x--;
} //우선순위가 "좌우 > 위" 이므로, 조건문 배치에서 "위"를 가장 마지막에 함.
}
System.out.println("#" + tc + " " + y); //정답 출력
}
}
}
'알고리즘 문제풀이 > SWEA(SW Expert Academy)' 카테고리의 다른 글
[SWEA][JAVA] 1223 - 계산기 2 (0) | 2021.09.22 |
---|---|
[SWEA][JAVA] 1861 - 정사각형 방 (0) | 2021.09.05 |
[SWEA][JAVA] 1954 : 달팽이 숫자 (0) | 2021.08.30 |
[SWEA][JAVA] 1233 - 사칙연산 유효성 검사 (0) | 2021.08.23 |
[SWEA][JAVA] 1225 - 암호 생성기 (0) | 2021.08.22 |