PostAddsense


Scale Topcoder



public class Scale
{
    public String[] scale(int x, int y, String[] image) {
        int m = image.length;
        int n = image[0].length();
        char[][] big = new char[y*m][x*n];
        String[] sol = new String[y];

        for(int i=0; i < y; i++)
            sol[i] = "";

        for(int i=0; i < m; i++)
        for(int j=0; j < n; j++)
        for(int k=y*i; k < y*(i+1); k++)
        for(int l=x*j; l < x*(j+1); l++)
            big[k][l] = image[i].charAt(j);

        for (int i=0; i < y; i++) {
            for (int j=0; j < x; j++) {
                double sum=0;
                for(int k=m*i; k < m*(i+1); k++)
                    for(int l=n*j; l < n*(j+1); l++)
                        sum += big[k][l];

                sol[i] += (char)(sum/(m*n) + 0.5);
            }
        }

        return sol;
    }
}


Explanation

y*image.length, x*image[0] 크기의 big 배열을 만든다. big 배열에 다음과 같이 image 배열값을 대입해준다.


// 확장한 배열(big[][])에 image 배열 값을 대입한다.
for(int i=0; i < m; i++)
for(int j=0; j < n; j++)
for(int k=y*i; k < y*(i+1); k++)
for(int l=x*j; l < x*(j+1); l++)
     big[k][l] = image[i].charAt(j);


x*y 크기에 맞춰 해당하는 big 배열의 값을 sum에 더하고 m*n으로 나눠주고 반올림이기 때문에 0.5를 더한다. 이 값을 통해 한 칸의 문자값을 표현할 수 있다.


References