티스토리 뷰

알고리즘/백준

백준 5549 (행성 탐사) - java

김다미김태리신시아 2023. 3. 2. 00:20

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

 

5549번: 행성 탐사

상근이는 우주선을 타고 인간이 거주할 수 있는 행성을 찾고 있다. 마침내, 전 세계 최초로 인간이 거주할 수 있는 행성을 찾았다. 이 행성은 정글, 바다, 얼음이 뒤얽힌 행성이다. 상근이는 이

www.acmicpc.net

누적합을 사용하는 문제이다. 사각형의 범위를 어떻게 계산할 지를 파악하는 것이 중요하다.

import java.io.*;
import java.util.*;

public class Main {
    static int n = 0;
    static int m = 0;

    static int k = 0;
    static int[][][] board = new int[1001][1001][3]; // 0 -> 정글 , 1 -> 바다 , 2 -> 얼음
    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()," ");

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine()," ");
        k = Integer.parseInt(st.nextToken());
        for(int i=1;i<=n;i++)
        {
            String[] line = br.readLine().split("");
            for(int j=1;j<=m;j++)
            {
                if(line[j-1].equals("J"))
                {
                    board[i][j][0] = board[i][j-1][0] + 1;
                    board[i][j][1] = board[i][j-1][1];
                    board[i][j][2] = board[i][j-1][2];
                }

                else if(line[j-1].equals("O"))
                {
                    board[i][j][0] = board[i][j-1][0];
                    board[i][j][1] = board[i][j-1][1]+1;
                    board[i][j][2] = board[i][j-1][2];
                }
                else{
                    board[i][j][0] = board[i][j-1][0];
                    board[i][j][1] = board[i][j-1][1];
                    board[i][j][2] = board[i][j-1][2]+1;
                }
            }
        }
        for(int i=2;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                board[i][j][0] += board[i-1][j][0];
                board[i][j][1] += board[i-1][j][1];
                board[i][j][2] += board[i-1][j][2];
            }
        }

        for(int i=1;i<=k;i++)
        {
            st = new StringTokenizer(br.readLine()," ");
            int sx = Integer.parseInt(st.nextToken());
            int sy = Integer.parseInt(st.nextToken());
            int lx =  Integer.parseInt(st.nextToken());
            int ly =  Integer.parseInt(st.nextToken());

            int num1 = 0;
            int num2 = 0;
            int num3 = 0;

            num1 = board[lx][ly][0] - board[sx-1][ly][0] - board[lx][sy-1][0] + board[sx-1][sy-1][0];
            num2 = board[lx][ly][1] - board[sx-1][ly][1] - board[lx][sy-1][1] + board[sx-1][sy-1][1];
            num3 = board[lx][ly][2] - board[sx-1][ly][2] - board[lx][sy-1][2] + board[sx-1][sy-1][2];
            bw.write(num1+" "+num2+" "+num3+"\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }


}

 

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

백준 19237 (어른 상어) - java  (0) 2023.03.13
백준 10159 (저울) - java  (0) 2023.03.04
백준 3967 (매직 스타) - java  (0) 2023.03.01
백준 3190 (뱀) - java  (0) 2023.02.22
백준 21608 (상어 초등학교) - java  (0) 2023.02.20