상세 컨텐츠

본문 제목

[JAVA] 백준 11049번 행렬 곱셈 순서

알고리즘

by dajingjing 2022. 3. 30. 14:08

본문

https://www.acmicpc.net/problem/11049

 

11049번: 행렬 곱셈 순서

첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같

www.acmicpc.net

이 문제를 풀다가 또!! 무한루프 돌아서 기록을 남긴다.

바로 찾는 실수더라도 같은 실수를 반복하지 않기위해 남겨본다.

 

이 문제는 백준 11066 파일합치기 문제를 풀었다면, 행렬의 곱셈을 이해하면 풀 수 있는 문제이다.

 

일단! 통과한 정답은 아래와 같다. (맥에서는 eclipse 사용, 윈도우에서는 intellij 사용중 - 아래는 intellij)

순서대로 곱하는 행렬에서, 총 행렬을 곱한 연산의 수 합을 구하는 과정이다.

행렬의 순서를 바꾸지 않고 연속된 행렬부터 곱할 수 있는데,

그 값들을 int[][] d 값에 저장하고, 재귀로 값을 호출하면서 구한다.

 

행렬이 10 개 있다고 하면, 전체 행렬 개수 중에서 구하고자 하는 곱의 결과를 계산하는 과정에서,

for 루트 문을 돌려서 1 x (2~10) / (1x2) x (3~10) / (1x3) x (4~10) ... 이런씩으로 구할 때

16번째 줄의 i 는 반드시 최고값보다 작아야 하는데!! i<y가 아닌 i<=y 로 넣어주는 실수를 했다.

 

이전에는 중간에 return 하지 않아서 무한루트가 발생한적이 있었고,

이번에는 범위를 잘못 지정해줘서 발생했다.

 

실수를 잘 기록하고 같은 실수는 반복하지 않도록 줄여야겠다.

관련글 더보기