코테 준비/Java [백준] #2167. 2차원 배열의 합 (실버 5) - https://www.acmicpc.net/problem/2167 import java.io.*;import java.util.*; 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[][] nums = new int[n][m]; for (int i = 0; i < n; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < m; j++) { nums[i][j] = Integer.parseInt(st.nextToken()); } } int[][] numsPrefixSum = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { numsPrefixSum[i][j] = nums[i][j]; if (j > 0) { numsPrefixSum[i][j] += numsPrefixSum[i][j - 1]; } if (i > 0) { numsPrefixSum[i][j] += numsPrefixSum[i - 1][j]; } if (i > 0 && j > 0) { numsPrefixSum[i][j] -= numsPrefixSum[i - 1][j - 1]; } } } int k = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); for (int idx = 0; idx < k; idx++) { st = new StringTokenizer(br.readLine()); int i = Integer.parseInt(st.nextToken()) - 1; int j = Integer.parseInt(st.nextToken()) - 1; int x = Integer.parseInt(st.nextToken()) - 1; int y = Integer.parseInt(st.nextToken()) - 1; int result = numsPrefixSum[x][y]; if (j > 0) { result -= numsPrefixSum[x][j - 1]; } if (i > 0) { result -= numsPrefixSum[i - 1][y]; } if (i > 0 && j > 0) { result += numsPrefixSum[i - 1][j - 1]; } sb.append(result); sb.append("\n"); } System.out.println(sb); }} 주의할 점 2차원 배열이므로 전체 누적합 저장과 부분 누적합 구할 때 이 점을 고려할 것! 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기피할 수 없다면 즐기는 자가 일류 Contents 당신이 좋아할만한 콘텐츠 [백준] #11659. 구간 합 구하기4 (실버 3) 2024.06.06 [백준] #17608. 막대기 (브론즈 2) 2024.06.06 [백준] #11441. 합 구하기 (실버 3) 2024.06.05 [백준] #2851. 슈퍼 마리오 (브론즈 1) 2024.06.05 댓글 0 + 이전 댓글 더보기