본문 바로가기

알고리즘/🥈 실버

백준 11659 구간 합 구하기 4 자바 풀이

728x90

난이도 : 실버3

풀이일 : 08207

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

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		int M = sc.nextInt();
		
		int[] nums = new int[N];
		int[] sums = new int[N+1]; // 누적 합
		
		for (int i = 0; i < N; i++) {
			nums[i] = sc.nextInt();
			if (i > 0) {
				sums[i] = nums[i-1] + sums[i-1];
			}
		}
		sums[N] = nums[N-1] + sums[N-1]; // 마지막 누적합 칸 채우기
		
		for (int j = 0; j < M; j++) {
			int start = sc.nextInt();
			int end = sc.nextInt();
			System.out.println(sums[end]-sums[start-1]);
		}
	}
}
  • 누적합 배열을 생성
  • 주어지는 숫자들을 누적합 인덱스로 사용해 구간 합 구하기

느낀점

특화 프로젝트 기간에는 알고리즘도 꾸준히 풀 수 있도록 해야지.

풀고보니 파이썬으로 풀었던 문제라서 괜히 아까웠다.

파이썬으로 안풀어본 개념들 위주로 자바 실버 문제를 풀어야 하는데 오늘도 다른 거 풀다 실패해서 급하게 하나를 남긴다.