그중 최대값을 구하는 문제이다.
어제의 교훈을 떠올려서 바로 풀지않고 조금 생각을 해보았다.
그래도 별로 떠오르는게 없어서 그냥 풀었다 ㅋㅋ
주어진 2차배열의 크기도 고정이고, 모래시계의 모양도 고정인데
모래시계모양의 합을 구할때 혁신적인 방법은 떠오르지 않았다.
개수가 몇개 안되니, 포문돌리지말고 그냥 나열해서 쓰는게 좋겠다는 생각정도만 가지고 답을 작성하고 제출했는데
다른 Testcase에서 오답이 나왔다.
짠 코드에선 특별히 문제점이나 예외점이 보이지 않아서 Testcase를 열어보았는데
기본으로 주어진 2차원배열 모서리가 찌그러져있었다 -.-
위에 조건에서는 고정이였는데 버그인가??? 아무튼 다른사람들은 또 어떻게 풀었나 찾아보니까
다른코드는 거의 같은데, 단 한가지 차이점이
나는 최대값을 선택정렬이 값을 선택하는 방식으로
int max = 0;
for(int i=0;i<arr.length-2;i++){
int sum = 0;
for(int j=0;j<arr.length-2;j++){
sum=arr[i][j]+arr[i+2][j]+arr[i][j+1]
+arr[i+1][j+1]+arr[i+2][j+1]
+arr[i][j+2]+arr[i+2][j+2];
if(max<sum){
max=sum;
}
}
}
System.out.println(max);
의 방식으로 최대값을 조정했는데
다른사람은 그냥 모든 합을 새로운 배열에 넣고, 배열을 오름차순 정렬한 다음에, 마지막값을 출력했다.
int sum[] = new int[16];
int h = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
sum[h] = arr[i][j] + arr[i][j+1] + arr[i][j+2]
+ arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1]
+ arr[i+2][j+2];
h++;
}
}
Arrays.sort(sum);
System.out.println(sum[15]);
아직 데이터베이스를 배우지 않았지만, 다른 책이나 글에서 봤던 데이터베이스의 기본마인드에 충실한 풀이같다.
전에 다른 학생들이랑 팀프로젝트 할때도 자료리스트에서 검색할때 새로운 리스트를 만들어서 저장한 뒤에 리턴해주는 것을 봤는데
완벽하게 체화가 안됬었다.
그래도 내 코드도, 새로 만든 배열만큼 메모리를 덜쓰고 정렬도 안하니 나쁘지 않은 것 같은데, 통과를 못하니 문제다ㅠㅠ.
다만 이해가 안되는게, 내가 짯던 코드는 왜 찌그러진 Testcase를 통과 못하고, 다른사람 코드는 통과한지 차이점인데
사람들한테 물어보러 다녀야겠다.
=============================================================================
이클립스에서 위 코딩을 디버깅 했을때, 인덱스 아웃오브바운드 오류가 뜨는데
아래코드도 똑같이 오류가 떴다.
아무래도 문제 오류같다.