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

2024. 8. 21. 10:57·Study/Algorithm
728x90

구간 합 구하기 5

  • 참고 : https://www.acmicpc.net/problem/11660

접근

해당 문제는 이차원 배열에서 누적합을 구해서 주어진 구간의 합을 구해야 한다고 생각했습니다.

  1. map이라는 N * N 의 2차원 배열에 누적합을 계산해서 저장
    • 시간 복잡도 : O(N^2)
      (i열 , j-1행의 누적합) + (i-1열, j행의 누적합) - (i-1열, j-1행의 누적합) + (i열, j행)
    • i 열 j 행 의 누적합은 아래 식을 통해서 구할 수 있습니다.
  1. 주어진 구간에서의 합 구하기해당 과정을 통해서 점화식을 구하면 아래와 같습니다.
- 코드를 구현할 때는 map, sumMap의 크기를 N+1로 해서 진행.

전체 코드

package baekjoon_day01;

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

public class PartSum5_11660 {
    static int[][] map;
    static int M, N;
    static int[][] sumMap;
    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());
        M = Integer.parseInt(st.nextToken());
        map = new int[N+1][N+1];
        sumMap = new int[N+1][N+1];
        for(int i = 1; i <= N; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j = 1; j <=N; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
                sumMap[i][j] = sumMap[i][j-1] + sumMap[i-1][j] + map[i][j] - sumMap[i-1][j-1];
            }
        }

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            int c = Integer.parseInt(st.nextToken());
            int d = Integer.parseInt(st.nextToken());

            sb.append(getSum(a, b, c, d) + "\n");
        }
        System.out.println(sb.toString());
    }

    private static int getSum(int a, int b, int c, int d) {
        return sumMap[c][d] - sumMap[c][b-1]- sumMap[a-1][d] + sumMap[a-1][b-1];
    }
}
728x90
반응형
저작자표시 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[백준 1167] 트리의 지름  (0) 2024.08.23
[백준 16953] A->B  (0) 2024.08.22
[baekjoon] 세탁소 사장 동혁(2720)  (0) 2024.05.31
[SWEA] 5658. [모의 SW 역량테스트] 보물상자 비밀번호  (1) 2024.05.18
[SWEA] 2001. 파리퇴치  (0) 2024.05.18
'Study/Algorithm' 카테고리의 다른 글
  • [백준 1167] 트리의 지름
  • [백준 16953] A->B
  • [baekjoon] 세탁소 사장 동혁(2720)
  • [SWEA] 5658. [모의 SW 역량테스트] 보물상자 비밀번호
pink_salt
pink_salt
유익함을 주는 개발자가 되도록 keep going
  • pink_salt
    KeepGoingForever
    pink_salt
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Project (7)
      • WEB study (3)
        • WEB(Springboot) (10)
        • Git, GitLab (13)
        • Clean code (1)
        • FrontEnd (3)
      • Study (21)
        • Algorithm (19)
        • 면접 준비 (2)
      • Cloud Computing (2)
        • AWS (2)
      • 프로그래밍 언어 (35)
        • Java (29)
        • Python (0)
        • javascript (6)
      • 운영체제 (0)
        • Linux (0)
      • Database (4)
        • MongoDB (8)
        • SQL (8)
      • 애플리케이션 개발 (1)
        • Android (1)
      • AI (1)
        • Deeplearning (1)
        • machinelearning (0)
      • Daily (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    gitlab
    빅오표기법
    MongoDB
    무료IT교육
    객체지향
    오블완
    IT교육
    Java
    Database
    코딩강의
    대외활동
    개념
    티스토리챌린지
    SW
    코드프레소
    mysql
    python
    Query
    언어
    Git
    SWEA
    무료코딩교육
    dp
    git branch
    codepresso
    백준
    코딩이러닝
    자바
    BFS
    spring boot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
pink_salt
[백준 11660] 구간 합 구하기 5
상단으로

티스토리툴바