상세 컨텐츠

본문 제목

[백준 Java] 11660번 구간 합 구하기 5

백준 자바

by 빙하둘리 2023. 1. 12. 18:03

본문

728x90

[백준 Java] 11660번 구간 합 구하기 5

 

문제 원본 링크

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

 

내 풀이 코드

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

public class Main {
    public static void main(String[] args) throws Exception{
        
        // 입출력 관해서 분석할 것 많은 문제
        // 입력 패턴과 출력 패턴 분석해서 낼 것!
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N=Integer.parseInt(st.nextToken());
        int M=Integer.parseInt(st.nextToken());

        int A[][] = new int[N+1][N+1];
        for(int i=1; i<=N; i++)
        {
            // 한 줄씩 입력 받기 - br.readLine() 사용
            st = new StringTokenizer(br.readLine());
            for(int j=1; j<=N; j++){
                A[i][j]=Integer.parseInt(st.nextToken()); // 한 줄에 열이 1,2,3,4 이렇게 바껴
            }
        }

        // 배열 D는 누적합에 관한 사항
        int D[][]=new int[N+1][N+1];
        for(int i=1; i<=N; i++){
            for(int j=1; j<=N; j++){
                D[i][j]=D[i][j-1]+D[i-1][j]-D[i-1][j-1]+A[i][j];
            }
        }


        for(int i=0; i<M; i++){ // 한 번에 구간 숫자 x1 y1 x2 y2 받기 X 질의 개수 M개
            // 구간 x1 y1 x2 y2 써주기
            st=new StringTokenizer(br.readLine()); // 한 줄에 공백으로 x1 y1 x2 y2 구분
            int x1 = Integer.parseInt(st.nextToken());
            int y1 = Integer.parseInt(st.nextToken());
            int x2 = Integer.parseInt(st.nextToken());
            int y2 = Integer.parseInt(st.nextToken());

            // 결과
            int result = D[x2][y2]-D[x1-1][y2]-D[x2][y1-1]+D[x1-1][y1-1];
            bw.write(String.valueOf(result));

            if(i!=M-1)
                bw.write("\n");
        }

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

 

1/13일까지

 

발문 읽기의 중요성 - (0,0)에서 (X,Y)는 사각형을 가리킨다는 것을 유의하지 않으면 문제를 엉뚱한 방향으로 풀고 꼬이게 된다.

어떤 식으로 했는지 그림 넣고.... -> 겹치는 부분을 어떻게(더하거나 빼거나) 해주는 그림.

입력, 출력 코드 패턴 분석해서 쓰기

728x90

관련글 더보기

댓글 영역