Algorithm/프로그래머스

[프로그래머스] Level1) 행렬의 덧셈

햄습햄 2021. 10. 8. 14:23

문제 설명

 

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

 

 

제한 조건

 

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

 


풀이 과정 (자바)

 

answer이라는 2차원 배열을 초기화했다.

이때, arr1과 arr2의 행렬은 행과 열의 크기가 같다고 하여 arr1의 값으로 초기화했다.

여기서 arr1.length는 row, arr1[0].length는 column이다. (2차원 배열)

arr1, arr2가 가변 배열이라고 따로 지정한 것은 아니었으므로,

행은 arr1.length로 처리했고, 열은 arr1[0]의 length로 처리했다.

 

예를 들어 아래와 같은 행렬이 있을 때,

cnt 1 2 3
1 arr1[0][0]
(<~ arr1[0])
arr1[0][1] arr1[0][2]
2 arr1[1][0]
(<~ arr1[1])
arr1[1][1] arr1[1][2]

rows 수: 2, columns 수: 3인 것을 알 수 있다.

그래서 arr1의 length는 2, arr1[0].length는 3이 된다.

 

이중 for문을 돌려 arr1, arr2 각각에 지정된 값을 더해 answer에 넣었다.

 

 

결과

 

 


다른 사람의 풀이

 

어차피 arr1과 arr2를 더해서 answer에 넣어야 하기 때문에 처음부터 answer에 arr1 값을 넣었다.

그리고 for문을 돌려 해당 위치에 arr2의 값을 넣었다.

 

 

기타

 

문제에서 "행과 열의 크기가 같은 두 행렬"이라는 부분을 잘못 이해했다.

예를 들어, 2*6의 형태로 arr1과 arr2가 있다고 판단한 것이 아니라 2*2의 형태로 arr1, arr2라고 생각했다.

그래서 new int[arr1.length] [arr1.length]로 초기화해서 처리하려고 했다.

 

입출력 예가 있었음에도 개념이 완벽하게 잡히지 않아 이해를 잘못하게 되고, 제대로 된 판단을 할 수 없었던 거 같다.

다시 한번 2차원 배열에 대해 학습하는 계기가 되었다.