프로그래머스 문제를 풀던 중, 연산을 변수 처리 해야만 끝자락에서 테스트 케이스 시간초과를 당하지 않는 경우를 만났다.
class Solution {
public int[][] solution(int[][] image, int K) {
int[][] answer = new int[image.length][image[0].length];
int t = K / 2;
for (int r = 0; r < image.length; r++) {
for (int c = 0; c < image[0].length; c++) {
int sum = 0;
for (int i = t; i >= -t; i--) {
for (int j = t; j >= -t; j--) {
int nr = r - i;
int nc = c - j;
if (nr >= 0 && nc >= 0 && nr < image.length && nc < image[0].length) {
sum += image[nr][nc];
} // 조건문 접근
}
}
answer[r][c] = sum / (K * K);
}
}
return answer;
}
}
위의 코드에서 조건문에 접근하는 image.length 와 image[0].length 를 접근할 때 드는 비용도 아래처럼 변수화를 시켜야만 테스트 효율성 테스트에서 통과하는 경우를 만났다. 앞으로 이런 부분은 꼼꼼하게 체크해야 될 듯 하다.
class Solution {
public int[][] solution(int[][] image, int K) {
int width = image.length; // 변수처리
int height = image[0].length; // 변수처리
int[][] answer = new int[width][height];
int t = K / 2;
for (int r = 0; r < width; r++) {
for (int c = 0; c < height; c++) {
int sum = 0;
for (int i = t; i >= -t; i--) {
for (int j = t; j >= -t; j--) {
int nr = r - i;
int nc = c - j;
if (nr >= 0 && nc >= 0 && nr < width && nc < height) {
sum += image[nr][nc];
}
}
}
answer[r][c] = sum / (K * K);
}
}
return answer;
}
}