코테
[백준 11660] 구간 합 구하기 5 JAVA
오은이
2023. 1. 20. 16:22



내가 짠 코드
import java.util.Scanner;
public class Day4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 0, m = 0; //n = NxN, m = 입력받는 횟수
int sum = 0;
System.out.print("NxN의 N과 입력받을 횟수 입력 : ");
n = sc.nextInt();
m = sc.nextInt();
int[][] numArr = new int[n][n];
for (int i = 0; i < n; i++) { //n만큼 입력 받기
for (int j = 0; j < n; j++) {
numArr[i][j] = sc.nextInt();
}
}
System.out.print("수 입력 완료, (x1, y1, x2, y2) 입력 : ");
int[] x1 = new int [m]; //연산 횟수만큼 입력받아야 하니, 횟수 크기로 생성
int[] y1 = new int [m];
int[] x2 = new int [m];
int[] y2 = new int [m];
for (int i = 0; i < m; i++) { //횟수 만큼 시작과 끝 입력 받기
x1[i] = sc.nextInt()-1;
y1[i] = sc.nextInt()-1;
x2[i] = sc.nextInt()-1;
y2[i] = sc.nextInt()-1;
for (int j=x1[i]; j <= x2[i]; j++) { //시작 인덱스와 끝 인덱스가 같지 않은 동안
if(j==x1[i]) {
if(x1[i] == x2[i]) { //ex)1,1 1,3처럼 x가 같은 경우
for (int h=y1[i]; h <= y2[i]; h++) { //y1부터 끝까지
sum += numArr[j][h];
}
}
else { //현재 j가 x1일 때
for (int z=y1[i]; z <= numArr.length-1; z++) { //y1부터 끝까지
sum += numArr[j][z];
}
}
}
else if (j == x2[i]){ //현재 j가 x2일 때
for (int w = 0; w <= y2[i]; w++) { //0부터 y2까지
sum += numArr[j][w];
}
}
else{ //현재 j가 x1, x2 모두 아닐 때 (x1과 x2 사잇값일 때)
for (int k = 0; k <= numArr.length-1; k++) { //0부터 끝까지
sum += numArr[j][k];
}
}
}
System.out.println(sum);
sum = 0; //초기화 안 시켜주면 전에 입력받은 것도 합산됨
}
}
}

엥? 2 2 3 4 결과가 다르게 나왔다 ㅡㅡ
틀린 부분이 한 두 개가 아닌가 보다.

그리고 코드 작성 하면서 너무 길다고 느껴지긴 했는데 역시나 시간 초과로 실패했다.