Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- this
- @NoArgsConstructor
- MariaDB Query Log
- Bean LifecCycle
- 합배열
- 2차원배열 구간합
- 구간합구하기
- select
- map()
- 마리아DB 쿼리 로그
- ajax
- 상속과 참조
- SQL
- InterruptException
- 구간합
- @AllArgsConstructor
- 슈더코드
- pseudo-code
- 백준
- 백준 11660번
- function test
- Java
- interrupted()
- jquery
- 백준 11659번
- json
- 백준 1235번
- 자바 람다식
- 생성자
- this와 this() 차이
Archives
- Today
- Total
평범한 연구소
[JAVA] 구간 합 구하기 5 - 백준 11660번 본문
package src.main.java.boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Ex11660 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int size = Integer.parseInt(st.nextToken());
int loop = Integer.parseInt(st.nextToken());
int[][] array = new int[size+1][size+1];
for(int i=1; i<=size; i++) {
st = new StringTokenizer(br.readLine());
for(int j=1; j<=size; j++) {
array[i][j] = Integer.parseInt(st.nextToken());
}
}
int[][] sumArray = calculateSum(array, size);
StringBuffer sb = new StringBuffer();
for (int i=0; i<loop; i++) {
st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int result = sumArray[x2][y2] - sumArray[x1-1][y2] - sumArray[x2][y1-1] + sumArray[x1-1][y1-1];
sb.append(result).append("\n");
}
System.out.println(sb);
}
private static int[][] calculateSum(int[][] array, int size) {
int[][] rowArray = new int[size+1][size+1]; // 행 구간합
int[][] sumArray = new int[size+1][size+1]; // 최종 구간합
// 행 구간합 선행
for(int i=1; i<=size; i++) {
for (int j=1; j<=size; j++) {
rowArray[i][j] = rowArray[i][j-1] + array[i][j];
}
}
// 행 구간합의 열 구간합 구하기
for(int i=1; i<=size; i++) {
for (int j=1; j<=size; j++) {
sumArray[j][i] = sumArray[j-1][i] + rowArray[j][i];
}
}
return sumArray;
}
}
calcaulateSum에서 합 배열 구할 때, 이전 합배열의 값을 가져와야하므로 행 구간합 시 원본배열이 아닌, rowArray[i][j-1]
열 구간합 시 행배열이 아닌, sumArray[j-1[i] 로 사용해야한다.
여기서 한 번 실수 ㅎㅎ
'JAVA > 알고리즘 공부' 카테고리의 다른 글
[JAVA] 구간 합 (1차원, 2차원 배열) (2) | 2025.03.08 |
---|---|
[JAVA] 백준 11659번: 구간 합 구하기 (0) | 2025.03.06 |
[프로그래머스] 붕대 감기 (JAVA) (0) | 2024.09.06 |
[JAVA] 유닉스 timestamp → Date, String으로 바꾸기 (unix timestamp to String) (0) | 2022.12.30 |
[JAVA] 에라토스테네스의 체 (0) | 2022.12.17 |