반응형
12-24 07:02
Today
Total
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
관리 메뉴

개발하는 고라니

[백준] 5014번 : 스타트링크 본문

Programming/백준

[백준] 5014번 : 스타트링크

조용한고라니 2021. 2. 15. 18:14
반응형
 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net


[DFS]

이런 DFS문제를 전에 풀어본 것 같다. 철수와 영희가 각각 i, j에 있을 때 철수가 왼쪽(-1), 오른쪽(+1)로만 움직일 수 있을 때 몇 번만에 영희를 만날 수 있는가? 와 같은 문제. 다만 처음에 오답을 받았다. 아무래도 DFS는 최단 거리를 찾기엔 부적합한 면이 없지않아 있으니 말이다. 다시 말해, 특정한 정점에 처음 도착했는데, 그 때가 최소값이 아닐 수 있다는 말이다. 그래서 대부분 BFS로 풀으신 것 같다.

 

하지만 DFS로도 264ms를 받고 AC했다. 각 정점마다 최대 2번 방문할 수 있게 하였고, 그 때의 엘리베이터를 몇 번 탔는지에 대한 값과 기존에 저장되어있는 값을 비교해 더 적은 값을 저장하였다.

# Code </>

public class Main {

    static int F, S, G, U, D, result = 1000000000;
    static int[] floor, visit;

    static void DFS(int start, int count){

        visit[start]++;
        
        if(start == G){
            result = Math.min(result, count);
            return;
        }

        if(floor[start] > count){
            floor[start] = count++;

            int up = start + U;
            int down = start - D;

            if(up <= F && visit[up] < 2) DFS(up, count);
            if(down > 0 && visit[down] < 2) DFS(down, count);
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        //F:정점개수 S:Start G:Goal U: Up D:Down
        F = Integer.parseInt(st.nextToken());
        S = Integer.parseInt(st.nextToken());
        G = Integer.parseInt(st.nextToken());
        U = Integer.parseInt(st.nextToken());
        D = Integer.parseInt(st.nextToken());

        floor = new int[F+1];
        visit = new int[F+1];
        Arrays.fill(floor, 1000000000);

        DFS(S, 0);

        System.out.println(result == 1000000000? "use the stairs":result);
    }
}
반응형

'Programming > 백준' 카테고리의 다른 글

[백준] 2146번 : 다리 만들기  (0) 2021.02.15
[백준] 2589번 : 보물섬  (0) 2021.02.15
[백준] 13023번 : ABCDE  (0) 2021.02.13
[백준] 9376번 : 탈옥  (0) 2021.02.13
[백준] 1774번 : 우주신과의 교감  (0) 2021.02.12
Comments