개발 공부~

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

코딩테스트/백준

[백준 - 11659] 구간 합 구하기 4. java

머밍 2024. 7. 8. 16:24

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

 

Ex

Solution

 

BufferedReader를 사용하는 이유
  • BufferedReader의 readLine() 메서드는 한 줄씩 읽어오는 데 적합

StringTokenizer를 사용하는 이유
  • BufferedReader로 읽어온 한 줄의 문자열을 공백이나 다른 구분자로 분리하여 토큰으로 분리함
  • 각 토큰을 쉽게 접근할 수 있으며, nextToken() 메서드를 사용하여 순차적으로 값 접근 가능
  • BufferedReader를 사용하여 입력을 빠르게 읽고, StringTokenizer를 사용하여 읽어온 입력을 분리함으로써 효율적이고 편리하게 입력을 처리할 수 있음.
왜 throws IOException 을 사용하는가?
  • BufferedReader의 readLine 메서드는 입력을 읽을 때 IOException의 발생가능성이 있음. 이를 처리하지 않으면 컴파일 오류가 발생함
  • 메서드 선언부에 throws IOException 추가 -> 현재 메서드에서 예외를 처리하지 않고, 호출한 메서드로 예외를 전달

 

BufferedReader와 StringTokenizer를 사용했다. 

 

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 br = new BufferedReader(new InputStreamReader(System.in));

        //첫 번째 줄 입력을 읽고 StringTokenizer로 공백을 기준으로 분리
        StringTokenizer st = new StringTokenizer(br.readLine());

        // 첫 번째 토큰을 정수로 변환하여 저장 (시험 본 과목의 개수)
        int su = Integer.parseInt(st.nextToken());
        //// 두 번째 토큰을 정수로 변환하여 저장 (구간 합을 계산할 쿼리의 수)
        int q = Integer.parseInt(st.nextToken());
        //누적 합을 저장할 배열 생성
        long[] nums = new long[su+1];

        //두 번째 줄 입력을 읽고 StringTokenizer로 공백을 기준으로 분리
        st = new StringTokenizer(br.readLine());

        // 1부터 과목 개수까지 반복하면서 누적 합 계산해 저장
        for (int i = 1; i <= su; i++) {
            nums[i] = nums[i-1] + Integer.parseInt(st.nextToken());

        }
        for(int j = 0; j < q; j++) {
            //// 각 쿼리 줄을 읽고 StringTokenizer로 공백을 기준으로 분리
            st = new StringTokenizer(br.readLine());
            int n1= Integer.parseInt(st.nextToken());
            int n2= Integer.parseInt(st.nextToken());
            System.out.println(nums[n2]-nums[n1-1]);
        }

    }
}

 

 

참고

여기서 왜 StringTokenizer와 BufferedReader를 사용해야하는지 궁금해 찾아보았다.

 

https://velog.io/@effirin/Java-StringTokenizer%EC%99%80-Split-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%96%B8%EC%A0%9C-%EC%8D%A8%EC%95%BC%ED%95%A0%EA%B9%8C

 

[Java] StringTokenizer와 Split() 메서드 언제 써야할까?

우선 StringTokenizer에 대해 알아보자. java.util.StringTokenizer 클래스란? 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(token)이라는 여러 개의 문자열로 잘라내는 데 사용된다. 예) “100,200,300,4

velog.io

 

https://lealea.tistory.com/95

 

Scanner보다 빠른 입력 BufferedReader, StringTokenizer

알고리즘 문제를 풀 때 입출력을 좀 더 빠르게 해야 할 경우가 생깁니다. 그중 오늘은 입력 클래스를 정리하려 합니다. 저는 원래 쓰기 간편한 Scanner를 주로 이용하였었는데요, 같은 문제를 풀었

lealea.tistory.com