코딩테스트

BOJ : 11659

joonwoong 2024. 5. 27. 17:02

1. 문제

 

2. 문제 설명 및 알고리즘 설계

 

입력받은 배열에서 주어진 구간의 합을 더하는 문제이다.

여기서 간과하면 안되는 점이 제한 시간 1초라는 점이다.

그래서 먼저 구간합을 다 저장해둔 뒤 원하는 구간만큼 빼내서 출력하는 개념으로 가야한다.

 

3. 코드

package week8;

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

public class Q11659_boj {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        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+1];
        st = new StringTokenizer(br.readLine());
        for(int i=1;i<=N;i++){
            arr[i] = arr[i-1]+Integer.parseInt(st.nextToken());
        }

        for(int i=1;i<=M;i++){
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());

            sb.append((arr[end]-arr[start-1]) + "\n");
        }

        System.out.println(sb);
    }
}

 

4. 시간복잡도

 

O(N)

 

5. 결과

 

 

6. 틀린 이유

 

누적합 배열을 사용하지 않았더니 바로 시간 초과가 났다...

'코딩테스트' 카테고리의 다른 글

BOJ : 3020  (0) 2024.05.29
BOJ : 14465  (0) 2024.05.29
BOJ : 2003  (0) 2024.05.26
BOJ : 2851  (0) 2024.05.24
BOJ : 11058  (2) 2024.05.22