[Java] 2_8_2_배열, 다차원 배열 예제

나영원·2020년 8월 30일
0

Java_basic2

목록 보기
14/37
/**
 * 행렬의 곱 계산하기
 *
 * 두 행렬의 곱을 구하는 프로그램을 작성하시오.
 * 행렬의 곱을 계산한 후에 행렬 형태로 출력하시오.
 *
 *
 * 인자
 * matA: N x M 행렬
 * matB: M x K 행렬
 */
public class MatMul {

    public static void main(String[] args) {
//        int[][] matA = {{1, 2, 3}, {4, 5, 2}};
//        int[][] matB = {{5, 2}, {6, 2}, {1, 0}};
//        int[][] mulMat = new int[matA.length][matB[0].length];
//
//        // mulMat (0,0) (1,1) 곱셈
//        for(int i = 0; i<matA.length; i++){
//            for(int j = 0; j<matA[0].length; j++){
//                 mulMat[i][i*1] += matA[i][j] * matB[j][i];
//
//            }
//        }
//        // mulMat (1,0)(0,1) 곱셈
//
//        for(int i = 0; i<matA.length; i++){
//            for(int j = 0; j<matA[0].length; j++){
//                mulMat[i][1-(i*1)] += matA[i][j] * matB[j][1-(i*1)];
//            }
//        }
//        // mulMAt 출력
//        for(int[] array : mulMat){
//            for(int val : array){
//                System.out.printf("%d ",val);
//            }
//            System.out.println("");
//        }

        //풀이 예시

        //3X2 2X3, 가운데 2를 하나의 축으로 활용해서 풀면된다는데...
        int [][] matA = {{1, 2, 3} ,{4, 5, 2}};
        int [][] matB = {{5, 2}, {6, 2}, {1, 0}};

        int [][] matC = new int[matA.length][matB[0].length];

        for (int i = 0; i < matC.length; i++) {
            for (int j = 0; j < matC[i].length; j++) {
                for (int k = 0; k < matA[0].length; k++) {
                    matC[i][j] += matA[i][k] * matB[k][j];
                }
            }
        }

        for (int [] row: matC) {
            for (int val: row) {
                System.out.printf("%d\t", val);
            }
            System.out.println("");
        }
        

    }
}

/**
 * 배열의 연속합 최대 구하기
 *
 * 정수 배열에서 연속된 값의 합의 최대값을 구하시오.
 *
 * ex1) {1, 45, -2, 5, -6} => 1 + 45 + (-2) + 5 = 49
 * ex2) {-4, 5, 12, -7, 52, -5, 7} => 52
 *
 *
 * 인자
 *  * integers: 정수 배열
 */

public class MaxSum {
    public static void main(String[] args) {
//        int [] integers = {-4, 7, 14, 9, -5, 4, 16, -22, 31};
//        int [] sum = new int[9];
//        int maxValue = 0;
//
//        for(int i= 0; i < integers.length; i++){
//
//            if(i==0){
//                sum[i] = integers[i];
//            } else{
//                sum[i] = integers[i] + sum[i-1];
//                maxValue= maxValue > sum[i] ? maxValue : sum[i];
//                System.out.println(sum[i]);
//            }
//
//        }
//        System.out.println("연속된 값의 합의 최대값 : "+maxValue);

        //풀이 예시
        //2개의 변수를 통해 풀수 있다.
        //나는 무조건 앞에것을 더햇는데 앞에 자리를 자를수 있다느것을 생각못햇네?

        int [] integers = {-4, 7, 14, 9, -5, 4, 16, -22, 31};

        int maxSum = 0;
        int currentSum = 0;
        for (int elem: integers) {
            currentSum += elem;
            currentSum = currentSum > elem ? currentSum : elem; // 이전에 더한값보다 지금 더하는값이 더큰가?
            maxSum = maxSum > currentSum ? maxSum : currentSum;
        }
        System.out.println(maxSum);

    }
}
profile
배우는 개발 일기

0개의 댓글