문제 원본 링크
https://www.acmicpc.net/problem/11660
내 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
// 입출력 관해서 분석할 것 많은 문제
// 입력 패턴과 출력 패턴 분석해서 낼 것!
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N=Integer.parseInt(st.nextToken());
int M=Integer.parseInt(st.nextToken());
int A[][] = new int[N+1][N+1];
for(int i=1; i<=N; i++)
{
// 한 줄씩 입력 받기 - br.readLine() 사용
st = new StringTokenizer(br.readLine());
for(int j=1; j<=N; j++){
A[i][j]=Integer.parseInt(st.nextToken()); // 한 줄에 열이 1,2,3,4 이렇게 바껴
}
}
// 배열 D는 누적합에 관한 사항
int D[][]=new int[N+1][N+1];
for(int i=1; i<=N; i++){
for(int j=1; j<=N; j++){
D[i][j]=D[i][j-1]+D[i-1][j]-D[i-1][j-1]+A[i][j];
}
}
for(int i=0; i<M; i++){ // 한 번에 구간 숫자 x1 y1 x2 y2 받기 X 질의 개수 M개
// 구간 x1 y1 x2 y2 써주기
st=new StringTokenizer(br.readLine()); // 한 줄에 공백으로 x1 y1 x2 y2 구분
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 = D[x2][y2]-D[x1-1][y2]-D[x2][y1-1]+D[x1-1][y1-1];
bw.write(String.valueOf(result));
if(i!=M-1)
bw.write("\n");
}
bw.flush();
bw.close();
}
}
1/13일까지
발문 읽기의 중요성 - (0,0)에서 (X,Y)는 사각형을 가리킨다는 것을 유의하지 않으면 문제를 엉뚱한 방향으로 풀고 꼬이게 된다.
어떤 식으로 했는지 그림 넣고.... -> 겹치는 부분을 어떻게(더하거나 빼거나) 해주는 그림.
입력, 출력 코드 패턴 분석해서 쓰기
[백준 JAVA] 1940번 주몽의 명령 (0) | 2023.01.28 |
---|---|
[백준 Java] 10986 나머지 (0) | 2023.01.14 |
백준 11659번 구간 합 알고리즘 이용 (0) | 2023.01.08 |
[백준 Java]15552번 코드 분석 (0) | 2022.12.19 |
[백준 10808번 알파벳 개수] 배열로 접근하면 좋은 이유 (0) | 2022.12.17 |
댓글 영역