문제
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 사항
- 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
결괏값 예시
arr1 | arr2 | return |
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
[[1],[2]] | [[3],[4]] | [[4],[6]] |
기본 제공 틀
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = {};
return answer;
}
}
풀이 [Java]
안녕하세요~
오늘은 프로그래머스의 행렬 덧셈 문제를 풀어보려고 합니다!
행렬의 덧셈 문제는 아주 기본적인 것만 알면 쉽게 풀 수 있는 ★☆☆☆☆ 별 하나짜리 문제입니다!
우선, 2차원 배열인 answer를 선언해야 하는데요.
아래에서 볼 수 있다시피 행은 arr1의 길이만큼으로 지정해주고, 열은 arr의 첫번째 즉, 0번째 배열의 길이만큼으로 지정해주면 됩니다.
arr1 = [[1,2],[2,3]] 과 arr2 = [[3,4],[5,6]]를 예를 들자면,
2행↓[[1,2] 2열→
[2,3]]
이렇게 선언을 해주면 됩니다!
이렇게 answer를 선언해주고 난 후, for문을 두번 돌려 각각, [0,0], [0,1], [1,0], [1,1]을 돌 수 있게 해주면 됩니다.
쉽게 말해, i가 0일 때, [0,0], [0,1] 즉, 0과 1인 j값을 돌려주고,
i가 1일 때, [1,0], [1,1] 즉, 0과 1인 j값을 또 다시 돌게 해줍니다!
그렇게 되면, 두개의 2차원 배열이 각자의 행과 열에 맞게 더해질 수 있게 됩니다!
혹시 설명이 부족하다고 생각하시면 댓글 남겨주세요 :D
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr1[0].length];
for(int i=0; i<arr1.length;i++){
for(int j=0; j<arr1[0].length; j++){
answer[i][j] = arr1[i][j] + arr2[i][j];
}
}
return answer;
}
}
채점 결과 [Java]
다른 사람의 생각 [Java]
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int row = Math.max(arr1.length, arr2.length);
int col = Math.max(arr1[0].length, arr2[0].length);
int[][] answer = new int[row][col];
for(int i=0; i<row ; i++){
for(int j=0; j<col; j++){
answer[i][j] = arr1[i][j] + arr2[i][j];
}
}
return answer;
}
}
이 풀이는 다른 분의 풀이인데요.
row 즉, 열에서 arr1의 길이와 arr2의 길이의 가장 큰 값을 Math.max라는 메서드를 이용해서 구했네요.
그리고 col 즉, 행에서는 arr1[0]의 길이와 arr2[0]의 길이의 가장 큰 값을 같은 방법을 사용해서 구했습니다.
이 방법은 저도 생각하지 못했던 방법이라 공유합니다.
나머지 방법은 위의 제 풀이와 같은 방법인 것같습니다.
Math.max를 사용했다는 점이 이 풀이의 포인트인 것 같습니다.
오늘도 코로나 조심하시고, 손 자주 씻으시고! 건강해야 알고리즘 공부가 계속 할 수 있으니깐요!
오늘도 제 글을 읽어주셔서 감사합니다 :D
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 1(끝)' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 1] 콜라츠추측 문제 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.04.17 |
---|---|
[프로그래머스 스킬체크 레벨 1] 가운데 글자 가져오기 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.21 |
[프로그래머스 스킬체크 레벨 1] 시저 암호 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.19 |
[프로그래머스 스킬체크 레벨 1] 프로그래머스 스킬체크 레벨 1 합격, 0통과! - 자바[Java] (0) | 2020.05.16 |
[프로그래머스 스킬체크 레벨 1] 문자열 다루기 기본 문제 풀이 및 설명 - 자바[Java] (0) | 2020.05.15 |
댓글