백준 22869 징검다리 건너기 (small) (Java,자바)

jonghyukLee·2022년 11월 21일
0

이번에 풀어본 문제는
백준 22869번 징검다리 건너기 (small) 입니다.

📕 문제 링크

❗️코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int N, K;
    static int [] stones;
    static boolean [] isVisited;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        stones = new int[N];
        isVisited = new boolean[N];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            stones[i] = Integer.parseInt(st.nextToken());
        }

        isVisited[0] = true;
        find(0);
        System.out.print("NO");
    }
    static void find(int idx) {
        if (isVisited[N - 1]) {
            System.out.print("YES");
            System.exit(0);
        }

        for (int i = N - 1; i > idx; i--) {
            if (!isVisited[i]) {
                int tmp = (i - idx) * (1 + Math.abs(stones[i] - stones[idx]));

                if (tmp <= K) {
                    isVisited[i] = true;
                    find(i);
                }
            }
        }
    }
}

📝 풀이

좌측 끝에 위치한 돌이 우측 끝까지 이동할 수 있다면 YES, 아니면 NO를 출력하는 문제입니다.
돌이 이동할 때 필요한 힘을 계산하는 조건이 문제에 주어지며, 입력된 K보다 힘이 크다면 해당 위치로는 이동할 수 없습니다.
문제에 뛰어넘는 거리의 제한은 없으므로, 처음 돌을 시작으로 맨 끝위치부터 재귀를 통해 탐색했습니다. 가장 멀리 뛰어넘을 수 있는 위치를 우선적으로 찾고, 해당 위치로부터 우측 끝까지 도달할 수 있는지 여부를 탐색하면 해결할 수 있습니다.

profile
머무르지 않기!

0개의 댓글