본문 바로가기

PS

[BOJ]1890번 : 점프

  https://www.acmicpc.net/problem/1890

 

1890번: 점프

첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장

www.acmicpc.net

 

 

분류 : 다이내믹 프로그래밍

더보기
import java.io.*;
import java.util.*;

public class Main {
    static Myscanner sc = new Myscanner();
    static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
    static int map[][];
    static long dp[][];
    static int[] dx = { 1, 0 };
    static int[] dy = { 0, 1 };

    public static void main(String[] args) {

        int N = sc.nextInt();
        map = new int[N][N];
        dp = new long[N][N];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                map[i][j] = sc.nextInt();
            }
        }
        dp[0][0]++;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                for (int dr = 0; dr < 2; dr++) {
                    int cx = i + dx[dr] * map[i][j];
                    int cy = j + dy[dr] * map[i][j];
                    if (dr == 0) {
                        if (i != N - 1 && cx < N)
                            dp[cx][j] += dp[i][j];
                    } else if (dr == 1) {
                        if (j != N - 1 && cy < N)
                            dp[i][cy] += dp[i][j];
                    }
                }
            }
        }
        out.println(dp[N - 1][N - 1]);
        out.flush();
    }
}

class Myscanner {
    BufferedReader br;
    StringTokenizer st;

    Myscanner() {
        br = new BufferedReader(new InputStreamReader(System.in));
    }

    String next() {
        while (st == null || !st.hasMoreElements()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }

    double nextDouble() {
        return Double.parseDouble(next());
    }

    String nextLine() {
        String str = "";
        try {
            str += br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}

처음에는 BFS를 이용해서 풀려고 했으나 100*100 사이즈를 간과하여 시간 초과를 받았다.

그래서 DP를 통해 다시 풀어서 통과 완료..

'PS' 카테고리의 다른 글

[BOJ]8983번 : 사냥꾼  (0) 2017.04.22
[BOJ]2352번 : 반도체 설계  (0) 2017.04.20
[BOJ]1620번: 나는야 포켓몬 마스터 이다솜  (0) 2017.04.19
[BOJ]1874번 : 스택 수열  (0) 2017.04.17
[BOJ]1931번 : 회의실 배정  (0) 2017.04.17