본문 바로가기
Problem Solving/Baekjoon

[백준] 22342 계산 로봇 - Dynamic Programming / Java

by graycode 2023. 11. 30.

 문제 링크

 

22342번: 계산 로봇

M개의 행(가로줄)과 N개의 열(세로줄)이 있는 격자의 각 칸에는 로봇이 있다. 각 행에는 위에서부터 아래로 1부터 M까지의 번호가 붙어 있고, 각 열에는 왼쪽에서부터 오른쪽으로 1 부터 N까지의

www.acmicpc.net

 

 풀이 코드

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int m = Integer.parseInt(st.nextToken()), n = Integer.parseInt(st.nextToken());

        int[][] mat = new int[m + 2][n];
        for (int i = 1; i <= m; i++) {
            String s = br.readLine();
            for (int j = 0; j < n; j++) mat[i][j] = s.charAt(j) - '0';
        }

        int max = 0, tmp;
        for (int i = 1; i < n; i++)
            for (int j = 1; j <= m; j++, max = Math.max(max, tmp))
                mat[j][i] += tmp = Math.max(mat[j][i - 1], Math.max(mat[j + 1][i - 1], mat[j - 1][i - 1]));

        bw.write(String.valueOf(max));
        bw.flush();
    }

}

댓글