1 λΆ„ μ†Œμš”

πŸ“ [S1_11660] ꡬ간 ν•© κ΅¬ν•˜κΈ° 5

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));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;

		st = new StringTokenizer(br.readLine(), " ");
		// ν‘œμ˜ 크기
		int N = Integer.parseInt(st.nextToken());
		// 합을 ꡬ해야 ν•˜λŠ” 횟수
		int M = Integer.parseInt(st.nextToken());

		// map
		int[][] map = new int[N+1][N+1];

		for (int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			for (int j = 1; j <= N; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		// DP μ €μž₯ λ°°μ—΄ -> ( 1,1 ) μ—μ„œ ( i,j ) κΉŒμ§€μ˜ ν•©
				int[][] dp = new int[N+1][N+1];
				for (int i = 1; i <= N; i++) {
					for (int j = 1; j <= N; j++) {
						dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + map[i][j];
					}
				}
		// λ²”μœ„
		int x1,y1,x2,y2;
		for (int i = 1; i <= M; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			x1 = Integer.parseInt(st.nextToken());
			y1 = Integer.parseInt(st.nextToken());
			x2 = Integer.parseInt(st.nextToken());
			y2 = Integer.parseInt(st.nextToken());

			sb.append((dp[x2][y2] -dp[x2][y1-1]-dp[x1-1][y2] +dp[x1-1][y1-1]) + "\n");
		}
		System.out.println(sb);
	}
}

πŸ€” λ‚˜μ˜ 생각

이 λ¬Έμ œμ—λŠ” μ—¬λŸ¬κ°€μ§€ 주의점이 μžˆμ—ˆλ‹€β€¦

  • x,y μ’Œν‘œ μˆœμ„œκ°€ μΌλ°˜μ μ΄μ§€ μ•Šλ‹€λŠ” 점..
  • (x1,y1) μ—μ„œ (x2,y2) κΉŒμ§€ κ΅¬ν•˜λŠ”λ° μ’Œν‘œλ₯Ό λ‹€ λ„λŠ” 것이 μ•„λ‹ˆλΌ μ‚¬κ°ν˜•μœΌλ‘œ κ΅¬ν•˜λŠ” 것이닀.
  • 데이터 λ²”μœ„κ°€ λ„“μ–΄μ„œ dpλ₯Ό μ‚¬μš©ν•΄μ•Όμ§€ μ‹œκ°„μ΄ˆκ³Όκ°€ μ•ˆλœ¬λ‹€.

λ‚˜λ„ ν•΄κ²°ν•˜μ§€ λͺ»ν•΄ μ°Έκ³  ν–ˆλŠ”λ° μ„€λͺ…이 μ•„μ£Ό μž˜λ˜μ–΄μžˆλ‹€.
μ°Έκ³ ν•˜λ©΄ 쒋을 것 κ°™λ‹€.





πŸ‘ μ°Έμ‘°
https://subbak2.tistory.com/65