happy coding

[java] 11659. 구간 합 구하기 4 본문

coding study/baekjoon

[java] 11659. 구간 합 구하기 4

yeoonii 2023. 7. 24. 14:44
import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //첫째 줄에 수의 개수 n과 합을 구해야 하는 횟수 m 입력 받음, 공백 기준
        StringTokenizer first = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(first.nextToken());
        int m = Integer.parseInt(first.nextToken());

        //둘째 줄에 입력받을 용도의 배열 생성
        StringTokenizer second = new StringTokenizer(br.readLine());
        int[] arr = new int[n];

        //n개의 수를 배열에 입력 받음
        for (int i=0 ; i<n ; i++) {
            arr[i] = Integer.parseInt(second.nextToken());
//            System.out.println(arr[i]);
        }

        //셋째 줄부터 합을 구해야 하는 구간 i와 j를 입력받음
        for (int section=0 ; section<m ; section++) {
            StringTokenizer third = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(third.nextToken());
            int j = Integer.parseInt(third.nextToken());
            int result = 0;

            if (i == j) {
                result = arr[i-1];
            } else {
                for (int i1=i ; i1<=j ; i1++) {
                    result += arr[i1 - 1];
                }
            }
            System.out.println(result);
        }
    }
}

이렇게 했더니 시간초과가 떴다. 뭐가 문제인지 모르겠는데 일단 너무 stringTokenizer을 남발한 것 같아서 수정

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //첫째 줄에 수의 개수 n과 합을 구해야 하는 횟수 m 입력 받음, 공백 기준
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        //둘째 줄에 입력받을 용도의 배열 생성
        st = new StringTokenizer(br.readLine());
        /*
        누적합 구할 때 인덱스를 편리하게 다루기 위함, arr[2] = 첫번째 + 두번째
        arr[0] = 합이 아닌 더미 값으로 사용
        */
        int[] arr = new int[n+1];

        //n개의 수를 배열에 입력 받음, 누적합 구하기
        for (int i=1 ; i<=n ; i++) {
            arr[i] = arr[i-1] + Integer.parseInt(st.nextToken());
        }

        //셋째 줄부터 합을 구해야 하는 구간 i와 j를 입력받고, 누적합끼리 빼서 해결
        for (int i=0 ; i<m ; i++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            System.out.println(arr[end] - arr[start-1]);
        }
    }
}

남발한 stringtokenizer 정리하고, 누적합 이용해서 푸는 문제라고 검색 결과가 나와서, 누적합...으로 하는데 배열 숫자 정하는걸 잘 못하는 것 같다. 으잉...화이팅..

'coding study > baekjoon' 카테고리의 다른 글

[java] 28061. 레몬 따기  (0) 2023.07.24
[java] 1110. 더하기 사이클  (0) 2023.07.24
[java] 10809. 알파벳 찾기  (0) 2023.07.24
[java] 2475. 검증수  (0) 2023.07.24
[java] 15964. 이상한 기호  (0) 2023.07.24
Comments