-
[백준/BOJ] 11659번 : 구간 합 구하기 4 (JAVA / 자바)백준 2022. 3. 14. 20:54
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
- 문제 -
난이도 실버 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
그냥 단순히 주어진 i 부터 j 까지의 합을 구하면 시간초과가 나왔다.
누적합 방식을 써서 풀어보자.
누적합은 말그대로 누적 합니다.
1 2 3 4 5값을 입력받으면 배열에 [1, 3, 6, 10, 15]가 저장되는 것이다.
막약 2~5까지의 합을 구하고 싶으면, 5번째의 누적합인 15에 1까지의 누적합인 1을 빼주면 된다. 14가 되는 것이다.
2~4 까지면 4까지의 누적합인 10에 1까지의 누적합니다 1을 빼주면 되는 것이다.
N개의 값을 입력 받으면, 배열은 0인덱스부터 N -1 인덱스까지 N의 크기를 갖는 배열이 필요하다. 하지만 필자는 필자 나름 연산의 편의를 위해 0인덱스부터 N인덱스까지 N + 1의 크기를 갖는 배열을 선언하고, 0인덱스에는 0을 저장한다.
그렇다면 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 br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int M = Integer.parseInt(st.nextToken()); int[] arr = new int[N + 1]; StringBuilder sb = new StringBuilder(); st = new StringTokenizer(br.readLine()); for(int i = 1; i <= N; i++) { arr[0] = 0; //누적 합 저장 arr[i] = arr[i - 1] + Integer.parseInt(st.nextToken()); } for(int i = 0; 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]).append("\n"); } System.out.println(sb); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1260번 : DFS와 BFS (JAVA / 자바) (0) 2022.03.17 [백준/BOJ] 17219번 : 비밀번호 찾기 (JAVA / 자바) (0) 2022.03.15 [백준/BOJ] 11286번 : 절댓값 힙 (JAVA / 자바) (0) 2022.03.14 [백준/BOJ] 11279번 : 최대 힙 (JAVA / 자바) (0) 2022.03.13 [백준/BOJ] 11047번 : 동전 0 (JAVA / 자바) (0) 2022.03.12