백준 2740 행렬 곱셈[JAVA]

Ga0·2024년 8월 27일
0

baekjoon

목록 보기
133/137
post-custom-banner

문제 해석

  • 문제는 이산수학 접한 사람이라면 문제 자체는 큰 어려움 없이 이해할거라 생각되지만, 이산수학을 접하지 못한 사람도 있을 수 있으니 간단하게 행렬 곱셈을 어떻게 하는지만 짚고 넘어가도록 할게요:)
  • 일단, 첫번째 줄에는 NxM크기의 행렬 A의 N, M을 입력 받는다. 두번째 줄(다음 줄)부터 N개의 줄까지 행렬 A의 요소 값을 입력 받고, N+1줄 부터는 MxK크기의 행렬 B의 M, K를 입력 받는다. N+2째 줄(다음 줄)부터 M개의 줄까지 행렬 B의 요소 값을 입력받고, 행렬 곱을 진행해주면 되는 문제!
  • 요소를 모두 입력 받았으면 행렬 곱은 아래와 같은 진행 해주면 된다!
  • 곱셈을 진행하여 나온 행렬은 아래와 같다.
      -1 -2 6
      -3 -6 12
      -5 -10 18

코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =  new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        StringBuilder sb = new StringBuilder(); //출력 값 쌓아두고 한꺼번에 출력하기 위해
        
        int N = Integer.parseInt(st.nextToken()); //행렬 A의 N(행)
        int M = Integer.parseInt(st.nextToken()); //행렬 A의 M(열)

        int[][] A = new int[N][M]; //행렬 A

        for(int i = 0; i < N; i++){ //행렬 A 값 넣기
            st = new StringTokenizer(br.readLine(), " ");
            for(int j = 0;  j < M; j++){
                A[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        st = new StringTokenizer(br.readLine(), " ");
        M = Integer.parseInt(st.nextToken()); //행렬 B의 M(행)
        int K = Integer.parseInt(st.nextToken()); //행렬 B의 K(열)

        int[][] B = new int[M][K]; //행렬 B

        for(int i = 0; i < M; i++){ //행렬 B 값 넣기
            st = new StringTokenizer(br.readLine(), " ");
            for(int j = 0;  j < K; j++){
                B[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        //행렬 곱셈 계산 반복문
        for(int i = 0; i < N; i++){
            for(int j =0; j < K; j++){
                int sum = 0;
                for(int k = 0; k < M; k++){
                    sum += A[i][k] * B[k][j];
                }
                // A의 i행의 j열 연산 값 출력 값에 저장
                sb.append(sum).append(' ');
            }
            sb.append("\n");
        }
        System.out.println(sb);

    }
}

결과

느낀 점

행렬 곱셈은 대학생때 이산수학이라는 과목으로 접한 거라 문제 푸는데는 큰 어려움이 없었지만,,,, 이 문제를 푸신 다른 분들의 코드를 보다가 스트라센 알고리즘으로 푼 코드를 발견했다...해당 알고리즘은 이해한 후 추후 추가할 수 있으면 추가할려고 한다:)

post-custom-banner

0개의 댓글