주어진 이미지에 박스 블러 알고리즘을 적용하여 이미지를 흐리게 만드는 것입니다. 알고리즘은 다음과 같이 작동합니다:
각 픽셀 x의 값은 x를 중심으로 하는 3 × 3 사각형의 픽셀 값의 평균입니다. (x 자체를 포함합니다.)
x의 테두리에 있는 모든 픽셀은 결과에서 제거됩니다.
이를 통해 이미지를 흐리게 만듭니다.
예를 들어,
[[1, 1, 1],
[1, 7, 1],
[1, 1, 1]]
알고리즘을 적용하면 중앙의 픽셀 (1, 1)의 값은 주변 픽셀의 평균으로 계산됩니다. (1 + 1 + 1 + 1 + 7 + 1 + 1 + 1 + 1) / 9 = 15 / 9 = 1.66666 ≈ 1이 됩니다. 결과에서 테두리에 있는 픽셀이 제거되기 때문에 최종 결과는 [[1]]이 됩니다.
int[][] solution(int[][] image) {
int[][] ret =new int[image.Length-2][];
for(int i = 0;i<image.Length-2;i++){
ret[i] = new int[image[0].Length-2];
for(int j = 0;j<image[0].Length-2;j++){
double sum = (image[i][j]+image[i+1][j]+image[i+2][j]+image[i][j+1]+image[i+1][j+1]+image[i+2][j+1]+image[i][j+2]+image[i+1][j+2]+image[i+2][j+2])/9;
ret[i][j] = (int)Math.Floor(sum);
}
}
return ret;
}
for(int i = 0;i<image.Length-2;i++): 주어진 이미지의 행에 대한 루프. 이미지의 가장자리를 피하기 위해 image.Length-2까지만 루프를 돕니다.
ret[i] = new int[image[0].Length-2];: 결과 배열의 각 행을 초기화합니다. 가장자리 픽셀을 제외한 각 행의 길이는 image[0].Length-2입니다.
for(int j = 0;j<image[0].Length-2;j++): 주어진 이미지의 열에 대한 루프. 이미지의 가장자리를 피하기 위해 image[0].Length-2까지만 루프를 돕니다.
double sum = ...: 현재 중심 픽셀을 포함한 3 × 3 사각형의 픽셀 값의 합을 계산합니다.
ret[i][j] = (int)Math.Floor(sum);: 계산된 평균 값을 소수점 이하를 제거하고, 정수 형태로 변환하여 결과 배열에 저장합니다.
최종적으로, 함수는 흐린 이미지를 나타내는 새로운 2차원 배열 ret를 반환합니다.
'CodeSignal' 카테고리의 다른 글
evenDigitsOnly (0) | 2023.12.15 |
---|---|
Minesweeper (0) | 2023.12.13 |
avoidObstacles (0) | 2023.12.12 |
arrayMaximalAdjacentDifference (0) | 2023.12.11 |
isIPv4Address (0) | 2023.12.10 |