전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

PS/BOJ

BOJ 11659 구간 합 구하기 4 [Java]

2021. 11. 25. 22:47

BOJ 11659 구간 합 구하기 4

1. 문제 링크

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

2. 문제 해설

가장 쉽게 생각할 수 있는 방법은 그냥 더해주는 것이다. 근데 이 방법은 시간복잡도가 O(nxm)으로 굉장히 느리기 때문에 다른 방식을 생각해보자.
다른 방법으로는 구간합을 이용한 방법을 떠올릴 수 있다. 특정 구간까지의 합을 저장해둔 배열을 이용하는 방식이다.
sum[i]는 처음부터 i개의 원소를 합한 값이다. 즉, 0 ~ i-1 인덱스의 원소의 합을 뜻한다.
그러므로, sum[0]=0 이고, 수들을 입력 받으면서 나머지 sum 배열의 원소들도 채워준다.
구하고자 하는 값이 i번째 수부터 j번째 수의 합이라면 sum[j]-sum[i-1]의 값을 구해주면 O(1)으로 쉽게 구할 수 있다.

3. 코드 보기

import java.io.*;
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());
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int[] arr = new int[n];
        int[] pSum = new int[n + 1];
        pSum[0] = 0;

        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
            pSum[i + 1] = pSum[i] + arr[i];
        }

        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());

            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            sb.append(pSum[end] - pSum[start - 1] + "\n");
        }

        bw.write(sb.toString());
        br.close();
        bw.flush();
        bw.close();
    }
}
저작자표시 (새창열림)

'PS > BOJ' 카테고리의 다른 글

BOJ 2623 음악프로그램 [Java]  (0) 2021.11.27
BOJ 1182 부분수열의 합 [Java]  (0) 2021.11.26
BOJ 11653 소인수분해 [Java]  (0) 2021.09.15
BOJ 6588 골드바흐의 추측 [Java]  (0) 2021.09.15
BOJ 1929 소수 구하기 [Java]  (0) 2021.09.10
    'PS/BOJ' 카테고리의 다른 글
    • BOJ 2623 음악프로그램 [Java]
    • BOJ 1182 부분수열의 합 [Java]
    • BOJ 11653 소인수분해 [Java]
    • BOJ 6588 골드바흐의 추측 [Java]
    모달조아
    모달조아

    티스토리툴바