落書きノート

ふと自分が気になった事を書いてます

Javaで問題を解く

計算量を考慮して、2パターンの解法を考えました。

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~

// q1_8 普通に解いた

class q1_8 {
    public static void main(String[] args) {
        int it = 0, jt = 0;
        int a[][] = {
            {1,1,2,2},
            {1,1,2,2},
            {1,1,0,2},
            {1,1,2,2}
        };
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < a[0].length; j++) {
                System.out.print(a[i][j]);
                if(j != a[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
        int[][] answer = new int[a.length][a[0].length];
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < a[0].length; j++) {
                if(a[i][j] == 0) {
                    it = i;
                    jt = j;
                }
            }
        }
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < a[0].length; j++) {
                if(it == i || jt == j)
                    answer[i][j] = 0;
                else
                    answer[i][j] = a[i][j];
            }
        }
        for(int i = 0; i < answer.length; i++) {
            for(int j = 0; j < answer[0].length; j++) {
                System.out.print(answer[i][j]);
                if(j != answer[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
    }
}

// q1_8_another 計算量を考慮した

import java.util.Arrays;

class q1_8_another {
    public static void main(String[] args) {
        int it = 0, jt = 0;
        int a[][] = {
            {1,1,2,2},
            {1,1,2,2},
            {1,1,0,2},
            {1,1,2,2}
        };
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < a[0].length; j++) {
                System.out.print(a[i][j]);
                if(j != a[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
        int[][] answer = new int[a.length][a[0].length];
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < a[0].length; j++) {
                if(a[i][j] == 0) {
                    it = i;
                    jt = j;
                }
            }
        }
        for(int i = 0; i < a.length; i++) {
            if(i == it) {
                Arrays.fill(answer[i], 0);
            } else {
                System.arraycopy(a[i], 0, answer[i], 0, a[0].length - jt);
                answer[i][jt] = 0;
                System.arraycopy(a[i], jt + 1, answer[i], jt + 1, a[0].length - jt - 1);
            }
        }
        
        for(int i = 0; i < answer.length; i++) {
            for(int j = 0; j < answer[0].length; j++) {
                System.out.print(answer[i][j]);
                if(j != answer[0].length - 1)
                    System.out.print(' ');
            }
            System.out.println();
        }
    }
}