본문 바로가기
코딩테스트 연습/백준_코딩테스트연습

백준 11659번 구간 합 구하기. (Java)

by 트레비봄 2023. 6. 7.
728x90

문제 설명

관련 키워드 #누적합.

제출 코드

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 {
    BufferedReader bufferedReader 
      = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer stringTokenizer 
      = new StringTokenizer(bufferedReader.readLine());
    int suNo = Integer.parseInt(stringTokenizer.nextToken());
    int quizNo = Integer.parseInt(stringTokenizer.nextToken());
    long[] S = new long[suNo + 1];
    stringTokenizer = new StringTokenizer(bufferedReader.readLine());
    for (int i = 1; i <= suNo; i++) {
      S[i] = S[i - 1] + Integer.parseInt(stringTokenizer.nextToken());
    }
    for (int q = 0; q < quizNo; q++) {
      stringTokenizer = new StringTokenizer(bufferedReader.readLine());
      int i = Integer.parseInt(stringTokenizer.nextToken());
      int j = Integer.parseInt(stringTokenizer.nextToken());
      System.out.println(S[j] - S[i - 1]);
    }
  }
}

코드 해석

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 {
    BufferedReader bufferedReader 
      = new BufferedReader(new InputStreamReader(System.in));
  1. Scanner 보다 BufferedReader 가 더 빠르게 처리하기에 선택.
  2. import java.io 는 i / o 패키지이다. 자세한 내용은 따로 글을 만들어서 서술 예정.

 

    StringTokenizer stringTokenizer 
      = new StringTokenizer(bufferedReader.readLine());
    int suNo = Integer.parseInt(stringTokenizer.nextToken());
    int quizNo = Integer.parseInt(stringTokenizer.nextToken());
    long[] S = new long[suNo + 1];
    stringTokenizer = new StringTokenizer(bufferedReader.readLine());
    for (int i = 1; i <= suNo; i++) {
      S[i] = S[i - 1] + Integer.parseInt(stringTokenizer.nextToken());
    }
    for (int q = 0; q < quizNo; q++) {
      stringTokenizer = new StringTokenizer(bufferedReader.readLine());
      int i = Integer.parseInt(stringTokenizer.nextToken());
      int j = Integer.parseInt(stringTokenizer.nextToken());
      System.out.println(S[j] - S[i - 1]);
    }
  }
}
  1. int형 대신 StringTokenizer stringTokenizer 사용.
  2. int suNo, int quizNo 로 숫자 개수와 질의 개수에 대한 변수 각각 저장.
  3. long형 에서 suNo + 1 은 0번째 배열 대신 1번째 배열로 바꿔서 첫번째 for문의 범위를 1부터 suNo 까지로 설정한다.
  4. 첫번째 for문을 통해 합 배열 생성하기.
  5. 두번째 for문 : 질의 개수만큼 반복하고, 질의 범위를 받아 ( i ~ j ) 구간 합 출력한다.
  6. int i = ~~~ , int j = ~~~ 로 질의 범위에 대한 데이터를 받아온다.
  7. 마지막으로 구간 합을 출력하며 끝.

컴파일 에러의 이유.

1. 오타. - 코드가 길어서 오타가 많았다.

2. import java.io 패키지에 대한 이해도 부족

 

추후에 io패키지에 대해 학습 후 블로그에 올릴 예정이다. 무작정 import java.util 를 쓰면 안되겠다.

 

728x90