[백준] 11659 구간합 구하기 4 (java)

0

코딩테스트

목록 보기
1/37
post-thumbnail

<문제>


문제 출처 : https://www.acmicpc.net/problem/11659

<나의 풀이>

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

public class Main{
    public static void main(String[] args) throws IOException{
        // 1.많은 값 받아야 되므로 Scanner보다 속도가 빠른 BufferedReader 사용
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        // 2. 긴 값을 입력받으므로 StringTokenizer 사용.
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        // 3. 처음으로 받을 값 변수 초기화
        int suNo = Integer.parseInt(stringTokenizer.nextToken()); // 받을 숫자의 개수
        int quizNo = Integer.parseInt(stringTokenizer.nextToken()); // 퀴즈 개수
        // 4. 부분합 배열 구해주기
        long[] S = new long[suNo+1]; // S배열의 0번째 값을 무시하기 위해서 suNo+1로 배열의 개수 설정
         // 혹시라도 수의 크기가 커서 int의 길이가 넘어가면 답이 잘못 나올 수 있기 떄문에 long으로 설정
        // 5. 부분합 구하기
        stringTokenizer = new StringTokenizer(bufferedReader.readLine()); // stringTokenizer를 for문 안으로 넣으면 안됨
        for(int i =1; i<=suNo; i++){
            S[i] = S[i-1] + Integer.parseInt(stringTokenizer.nextToken()); // S[1] = A[0]
        }
        // 6. 구간의 합 구하기
        for(int q =0; q<quizNo; q++){
            stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            int i = Integer.parseInt(stringTokenizer.nextToken()); // 구간 i부터
            int j = Integer.parseInt(stringTokenizer.nextToken()); // 구간 j까지
            System.out.println(S[j]-S[i-1]);
        }
    }
}

<핵심 개념>

구간합 공식 기억해두기! (알고리즘 코딩테스트 문제풀이 java편 구간합)
S[i] = S[i-1] + A[i]

풀이 구상은 간단한데 코드를 짜면 간단하진 않았다. 자주 쓰는 코드는 손에 익도록 문제를 부지런히 풀어주자.

profile
두둥탁 뉴비등장

0개의 댓글