자주 사용할 계산식은 변수로 잡자.

구창회·2023년 6월 17일
0

자바 공부 중

목록 보기
9/10

프로그래머스 문제를 풀던 중, 연산을 변수 처리 해야만 끝자락에서 테스트 케이스 시간초과를 당하지 않는 경우를 만났다.

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;
    }
}
profile
백엔드 엔지니어 프로 지망생

0개의 댓글