코린이의 소소한 공부노트

[LeetCode/Easy] 661. Image Smoother 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 661. Image Smoother

무지맘 2023. 5. 29. 21:39

1. Input

1) int[] img

 

2. Output

1) img3*3 필터를 씌워 이미지를 부드럽게 바꾼 결과를 반환

- img[i][j] == img[i][j]와 이를 둘러싸고 있는 8개의 셀의 값의 평균(9개의 평균) <- 파란색 네모

- 만약 둘러싸고 있는 셀이 8개가 안되면 있는 것만으로 평균을 낸다. <- 빨간색 네모

- 평균의 소수점 아래 숫자는 버린다.

 

3. Constraint

1) m == img.length

2) n == img[i].length

3) 1 <= m, n <= 200

4) 0 <= img[i][j] <= 255

 

4. Example

Input: img = [[100,200,100],[200,50,200],[100,200,100]] -> Output: [[137,141,137],[141,138,141],[137,141,137]]

설명:

- (0,0), (0,2), (2,0), (2,2): floor((100+200+200+50)/4) = floor(137.5) = 137

- (0,1), (1,0), (1,2), (2,1): floor((200+200+50+200+100+100)/6) = floor(141.666667) = 141

- (1,1): floor((50+200+200+200+200+100+100+100+100)/9) = floor(138.888889) = 138

 

5. Code

1) 첫 코드(2023/05/29)

class Solution {
    public int[][] imageSmoother(int[][] img) {
        int[][] ans = new int[img.length][img[0].length];
        for(int i=0 ; i<img.length ; i++)
            for(int j=0 ; j<img[i].length ; j++){
                int sum = 0, count = 0;
                for(int a=Math.max(0,i-1) ; a<=Math.min(img.length-1,i+1) ; a++)
                    for(int b=Math.max(0,j-1) ; b<=Math.min(img[i].length-1, j+1) ; b++){
                        sum += img[a][b];
                        count++;
                    }
                ans[i][j] = sum/count;
            }
        return ans;
    }
}