작성
·
156
0
반대 누적합에 대한 테스트케이스 예외가 없는거 같아요.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
int[][] intArr = new int[length][length];
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
intArr[i][j] = sc.nextInt();
}
}
System.out.println(answer(length, intArr));
}
private static int answer(int length, int[][] intArr) {
/* 대각선 누적합, 최대값 */
int xXSum = 0, xYSum = 0, max = 0;
for (int i = 0; i < length; i++) {
/* 행, 열 누적합 */
int rowSum = 0, colSum = 0;
for (int j = 0; j < length; j++) {
/* 각 행의 누적합 저장*/
rowSum += intArr[i][j];
/* 각 열의 누적합 저장*/
colSum += intArr[j][i];
}
if (rowSum > max) max = rowSum;
if (colSum > max) max = colSum;
/* 대각선의 누적 합 저장*/
xXSum += intArr[i][i];
xYSum += intArr[length-1-i][length-1-i];
}
/* 대각선 의 합 추가*/
if (xXSum > max) max = xXSum;
if (xYSum > max) max = xYSum;
return max;
}
}
반대 대각선을 코드는 위 코드에서 바로 아래와 같습니다.
xYSum += intArr[length-1-i][length-1-i];
위에가 잘못 적용한 코드이고 (바로 위의 정대각선과 똑같은 작업을 하는것과 마찬가지입니다.)
이것을 코딩채점사이트 상에 직접 돌려보면 정답으로 인정되지만
3
1 1 3
1 3 1
3 1 1
이렇게 데이터 직접 넣어보면 9가 아닌 5가 최대값으로 출력됩니다.
즉, 코딩채점에 반대 대각선에 대한 테스트케이스가 없다는 소리에요.
xYSum += intArr[i][length-1-i];
위 코드가 정답이고, 이렇게 했을때에는 처리가 되긴 되는데
아무튼 현재 테스트케이스 상에 반대 대각선에 대한 누적합이 더 큰 경우가 없어서 처리가 안되고있습니다.
그냥 반대 대각선 누적합 자체가 없는셈 치는거나 마찬가지에요
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
문제 코드에서 반대 대각선의 누적합을 잘못 계산하는 부분을 지적해 주셨군요.
원래 코드는
xYSum += intArr[length-1-i][length-1-i];
위와 같이 되어 있어서 정대각선과 같은 방식으로 계산되었습니다. 따라서 이는 잘못된 부분이 맞습니다. 반대 대각선을 올바르게 계산하는 방법은
xYSum += intArr[i][length-1-i];
로 수정해야 합니다. 이렇게 수정하면 각 행에서 반대편 대각선 방향의 합을 올바르게 계산할 수 있습니다.
테스트케이스에서 반대 대각선의 누적합이 더 클 경우를 제대로 처리하지 못하는 문제에 대해 지적해 주셨는데, 정확한 지적입니다. 테스트케이스가 해당 부분을 충분히 커버하지 못하면, 이런 식의 오류는 쉽게 발견되지 않습니다.
좋은 지적과 함께 올바른 코드 수정 방법을 제시해 주셔서 감사합니다. 이를 통해 문제를 해결할 수 있을 것입니다.