개발하는 사막여우
개발하는 사막여우
개발하는 사막여우
전체 방문자
오늘
어제
  • All (310)
    • Books (13)
      • 읽기 좋은 코드가 좋은 코드다 (13)
    • Study (6)
      • Blockchain (3)
      • Algorithm (3)
    • Baekjoon (36)
    • Programmers (166)
    • LeetCode (15)
    • Open Source (1)
      • Youtube Popout Player (1)
    • Language (32)
      • Python (9)
      • JS (8)
      • Java (5)
      • HTML (6)
      • CSS (4)
    • Library & Framework (15)
      • React.js (15)
    • IDE (2)
      • IntelliJ (2)
    • Airdrop (9)
    • Tistory (2)
    • etc.. (12)
      • Cozubi (6)
      • lol-chess (0)

블로그 메뉴

  • Github

공지사항

인기 글

태그

  • 알고리즘문제풀이
  • 카카오 알고리즘 문제
  • 2018 KAKAO BLIND RECRUITMENT
  • 파이썬
  • 카카오 코딩테스트
  • 코딩테스트연습
  • 클린 코드 작성법
  • 클린 코드
  • 신규 코인 에어드랍
  • 카카오 공채
  • Java
  • programmers
  • 코인줍줍
  • 프로그래머스
  • Cozubi
  • 코주비
  • Python
  • 백준
  • 읽기 좋은 코드가 좋은 코드다
  • 프로그래머스 위클리 챌린지

최근 댓글

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
개발하는 사막여우

개발하는 사막여우

[프로그래머스] 최적의 행렬 곱셈 / Java
Programmers

[프로그래머스] 최적의 행렬 곱셈 / Java

2021. 4. 26. 19:08
반응형

문제주소 :programmers.co.kr/learn/courses/30/lessons/12942#

 

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

크기가 a by b인 행렬과 크기가 b by c 인 행렬이 있을 때, 두 행렬을 곱하기 위해서는 총 a x b x c 번 곱셈해야합니다. 예를 들어서 크기가 5 by 3인 행렬과 크기가 3 by 2인 행렬을 곱할때는 총 5 x 3 x 2 =

programmers.co.kr


<문제 설명>

더보기

문제 설명

크기가 a by b인 행렬과 크기가 b by c 인 행렬이 있을 때, 두 행렬을 곱하기 위해서는 총 a x b x c 번 곱셈해야합니다.
예를 들어서 크기가 5 by 3인 행렬과 크기가 3 by 2인 행렬을 곱할때는 총 5 x 3 x 2 = 30번의 곱하기 연산을 해야 합니다.

행렬이 2개일 때는 연산 횟수가 일정 하지만, 행렬의 개수가 3개 이상일 때는 연산의 순서에 따라서 곱하기 연산의 횟수가 바뀔 수 있습니다. 예를 들어서 크기가 5 by 3인 행렬 A, 크기가 3 by 10인 행렬 B, 크기가 10 by 6인 행렬 C가 있을 때, 순서대로 A와 B를 먼저 곱하고, 그 결과에 C를 곱하면 A와 B행렬을 곱할 때 150번을, AB 에 C를 곱할 때 300번을 연산을 해서 총 450번의 곱하기 연산을 합니다. 하지만, B와 C를 먼저 곱한 다음 A 와 BC를 곱하면 180 + 90 = 270번 만에 연산이 끝납니다.

각 행렬의 크기 matrix_sizes 가 매개변수로 주어 질 때, 모든 행렬을 곱하기 위한 최소 곱셈 연산의 수를 return하는 solution 함수를 완성해 주세요.

제한 사항

  • 행렬의 개수는 3이상 200이하의 자연수입니다.
  • 각 행렬의 행과 열의 크기는 200이하의 자연수 입니다.
  • 계산을 할 수 없는 행렬은 입력으로 주어지지 않습니다.

입출력 예

matrix_sizes                                                          result
[[5,3],[3,10],[10,6]] 270

입출력 예 설명

입출력 예#1
문제의 예시와 같습니다.

 

<풀이법>

▒ 한줄 개념: 동적 프로그래밍 ▒ 

동적 프로그래밍의 기본적인 문제 중 하나라고 한다. 아래 블로그를 참고하여 풀었다.

source-sc.tistory.com/24

 

[1][연쇄행렬 최소곱셈 알고리즘] (Matrix chain multiplication)

연쇄행렬 최소곱셈 알고리즘 (Matrix chain multiplication) 연쇄행렬 최소곱셈 알고리즘이란 주어진 행렬들의 곱을 최소의 연산으로 수행하는 최소횟수를 구하는 알고리즘이다. 행렬의 곱셈에서 결합

source-sc.tistory.com

 

<코드(Java)>

import java.util.*;

class Solution {
    public int solution(int[][] matrix_sizes) {
        int length = matrix_sizes.length;
        int[][] dp = new int[length][length];
        
        for(int i = 0; i < length; i++){
            for(int j = 0; j < length; j++){
                dp[i][j] = Integer.MAX_VALUE;
            }
        }
        
        for(int i = 0; i < length; i++){
            for(int j = 0; j < length-i; j++){
                int a = j;
                int b = j+i;
                if(a == b) dp[a][b] = 0;
                else{
                    for(int k = a; k < b; k++){
                        dp[a][b] = min(dp[a][b], dp[a][k] + dp[k+1][b] + matrix_sizes[a][0] * matrix_sizes[k][1] * matrix_sizes[b][1]);
                    }
                }
            }
        }
        
        return dp[0][length-1];
    }
    
    public int min(int a, int b){
        return a < b ? a : b;
    }
}

 

 

더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest

 

 

반응형
저작자표시 (새창열림)

'Programmers' 카테고리의 다른 글

[프로그래머스] 로또의 최고 순위와 최저 순위 / Java  (0) 2021.04.27
[프로그래머스] 행렬 테두리 회전하기 / Java  (2) 2021.04.26
[프로그래머스] 모두 0으로 만들기 / Java  (0) 2021.04.22
[프로그래머스] 괄호 회전하기 / Java  (0) 2021.04.21
[프로그래머스] 음양 더하기 / Java, JavaScript  (0) 2021.04.20
    'Programmers' 카테고리의 다른 글
    • [프로그래머스] 로또의 최고 순위와 최저 순위 / Java
    • [프로그래머스] 행렬 테두리 회전하기 / Java
    • [프로그래머스] 모두 0으로 만들기 / Java
    • [프로그래머스] 괄호 회전하기 / Java
    개발하는 사막여우
    개발하는 사막여우
    개발개발 주저리주저리

    티스토리툴바