SWEA(SW Expert Academy) 1210. [S/W 문제해결 기본] 2일차 - Ladder1 D4

heesan·2024년 9월 25일

코딩테스트

목록 보기
9/40

● 문제출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&problemLevel=4&contestProbId=AV14ABYKADACFAYh&categoryId=AV14ABYKADACFAYh&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=4&pageSize=10&pageIndex=1

●정리(요약)
사타리 타기 게임 X = 0부터 시작하며 100*100 크기의 2차원 배열로 그려짐.
도착 지점은 2이며 지나갈 수 있는 경로는 1 아니면 0이다.
아래로 이동하며 좌우 방향으로 이동 가능한 통로가 나타나면 방향 전환을 하게 된다.

●코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
class Solution
{
    static int [] dirX  = {-1,1,0};
    static int [] dirY  = {0,0,-1};
    static int [][] arr = new int[101][101];
    static boolean [][] visited ;
 
    public static void main(String args[]) throws IOException{
        BufferedReader br =  new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st ;
         
        for(int i  = 1; i<=10; i++) {
            int T = Integer.parseInt(br.readLine());
             
             
            // 0 : Y , 1 : X
            int [] des = new int[2];
            visited = new boolean [101][101];
             
            for(int j=1; j<=100; j++) {
                st = new StringTokenizer(br.readLine()," ");
                for(int k=1; k<=100; k++) {
                    int num = Integer.parseInt(st.nextToken());
                    arr[j][k]=num;
                    if(num==2) {
                        des[0]=j;
                        des[1]=k; 
                    }
                }
            }
             
            int answer = dir(des[1],des[0]);
             
            sb.append("#").append(T).append(" ").append(answer-1).append("\n");
        }
        System.out.println(sb.toString());
    }
     
    public static int dir(int x , int y) {
        if(y==1) {
            return x;
        }
         
        for(int i = 0 ; i<3; i++) {
            int tmpX = x+ dirX[i];
            int tmpY = y+ dirY[i];
            if(tmpX<101&&!visited[tmpY][tmpX]&&arr[tmpY][tmpX]==1) {
                visited[tmpY][tmpX]=true;
                return dir(tmpX,tmpY);
            }
        }
        return 0;
    }
 
}
profile
👩‍💻Backend Engineering

0개의 댓글