/**
* 행렬의 곱 계산하기
*
* 두 행렬의 곱을 구하는 프로그램을 작성하시오.
* 행렬의 곱을 계산한 후에 행렬 형태로 출력하시오.
*
*
* 인자
* 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);
}
}