갓생사는 김초원의 개발 블로그
chocho_log
갓생사는 김초원의 개발 블로그
전체 방문자
오늘
어제
  • 분류 전체보기 (76)
    • 개발 (22)
      • Spring (4)
      • Java (3)
      • Database (2)
      • Elasticsearch (3)
      • ETC (3)
      • JPA (3)
      • 이슈 (1)
    • 코딩 테스트 (43)
      • 프로그래머스 (23)
      • 백준 (12)
      • TIP (8)
    • 자료구조 (2)
    • 알고리즘 (4)
    • 잡생각 (0)
    • 경험 (3)
      • AWS re:Invent 2024 (3)

블로그 메뉴

    공지사항

    인기 글

    태그

    • Lazy Loading
    • jpa
    • jar
    • 디자인패턴 #SOLID 원칙
    • 지연로딩
    • Spring Boot Embedded Tomcat
    • war
    • querydsl

    최근 댓글

    최근 글

    갓생사는 김초원의 개발 블로그

    chocho_log

    [프로그래머스] [Level2] [JAVA] 행렬의 곱셈
    코딩 테스트/프로그래머스

    [프로그래머스] [Level2] [JAVA] 행렬의 곱셈

    2020. 10. 18. 22:53

    [문제 설명]

    https://programmers.co.kr/learn/courses/30/lessons/12949

     

    코딩테스트 연습 - 행렬의 곱셈

    [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

    programmers.co.kr

     

    [풀이 과정]

    행렬A와 행렬B 를 곱하기 위해서는 두 행렬이 다음 성질을 만족해야 한다. 

    출처 : https://mathbang.net/562

    1. 행렬A의 행의 길이(k)와 행렬B의 열의 길이(k)가 같아야 한다. 

    2. 두 행렬의 곱한 결과 행렬은 가로 세로가 (행렬B의 행 * 행렬A의 열) 이다. (m * n)

    3. A * B 가 만족하듯이 B * A가 만족하려면 그림처럼 두 행렬의 k 부분이 같아야 한다. ( 다르면 곱할 수 없음)

     

    코드로 구현할 때는 이 유튜브 알고리즘을 보고 도움을 받았다. 

    https://www.youtube.com/watch?v=yCWLN4tSxjk   

     

    [JAVA code]

    package com.algorithm.level2;
    
    import java.util.Arrays;
    
    public class Test20 {
    
        public static void main(String[] args) {
            int[][] arr1 = {{1, 4}, {3, 2}, {4, 1}};
            int[][] arr2 = {{3, 3}, {3, 3}};
    
            int[][] answer = solution(arr1, arr2);
            for (int i = 0; i < answer.length; i++) {
                System.out.println(Arrays.toString(answer[i]));
            }
        }
    
        public static int[][] solution(int[][] arr1, int[][] arr2) {
            int[][] answer = new int[arr1.length][arr2[0].length];
    
            for (int i = 0; i < arr1.length; i++) {
                for (int j = 0; j < arr2[0].length; j++) {
                    for (int k = 0; k < arr1[0].length; k++) {
                        answer[i][j] += (arr1[i][k] * arr2[k][j]);
                    }
                }
            }
            return answer;
        }
    }
    

    '코딩 테스트 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스][Level2] 압축 - JAVA  (0) 2020.11.20
    [프로그래머스][Level2][JAVA] 영어 끝말잇기  (0) 2020.11.07
    [프로그래머스][Level2][JAVA] 수식 최대화  (0) 2020.10.24
    [Level2] 피보나치 수  (0) 2020.10.12
    [Level2] 다음 큰 숫자  (0) 2020.10.10
      '코딩 테스트/프로그래머스' 카테고리의 다른 글
      • [프로그래머스][Level2][JAVA] 영어 끝말잇기
      • [프로그래머스][Level2][JAVA] 수식 최대화
      • [Level2] 피보나치 수
      • [Level2] 다음 큰 숫자
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그 github: https://github.com/kimchowon

      티스토리툴바