[JAVA] 행렬의 덧셈

태로미·2023년 10월 5일
0

Programmers

목록 보기
25/29
post-thumbnail

❓문제


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



🚫제한


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


💻입출력 예


arr1arr2arr3
[[1,2],[2,3]][[3,4],[5,6]][[4,6],[7,9]]
[[1],[2]][[3],[4]][[4],[6]]













📝해결


1. 이중 for문

class Solution {
  public int[][] solution(int[][] arr1, int[][] arr2) {
	      
		int[][] answer = {};
		answer = arr1;
		
		for(int i=0; i<arr1.length; i++) {
			for(int j=0; j<arr1[0].length; j++) {
				answer[i][j] += arr2[i][j];
			}
		}
	
	  return answer;
  }
}
  • 결과를 저장할 2차원배열 answer을 초기화 하고 파라미터의 2차원배열 arr1을 answer에 담음.
    • 어차피 arr1+arr2이므로 추후 answer에 arr2의 값 누적합을 위해.
  • 중첩 for문을 통해 2차원 배열의 누적합 구하기.
    • 1번째 for문에서는 배열의 전체 크기만큼 반복.
    • 2번째 for문에는 배열의 행 크기만큼 반복하여 각 행에 대한 열의 값을 구해 answer에 담음.

2. Stream

class Solution {
	public int[][] solution(int[][] arr1, int[][] arr2) {

		int[][] arr = new int[arr1.length][arr1[0].length];
    	IntStream.range(0, arr1.length)
				 .forEach(i -> IntStream.range(0, arr1[0].length)
						                .forEach(j -> arr[i][j] = arr1[i][j] + arr2[i][j]));

        return arr;
	}
}
  • 2차원 배열 arr을 선언하고 행의 크기를 arr1.length, 열의 크기를 arr1[0].length로 생성함.
  • IntStream을 생성하고 0부터 arr1.length-1까지 범위를 잡음.
  • forEach문을 돌리는데 쉽게 말해 ‘이중 for문’이라고 생각하면 됨.
  • 다시 IntStream의 범위를 0부터 arr1[0]의 길이까지,
    즉 0부터 열의 크기-1까지 잡아줌.
  • 또 한 번 forEach문을 돌려 각 행과 열에 있는 원소들을 더하는 값을 더해줌.






💭마무리

  • Level_1 / 18:20
  • Point
    – Stream_forEach문

이중 for문을 사용해서 푸는건 금방 풀겠는뎅...
아직까지 스트림을 사용한 풀이법은 알다가도 모르겠다🙄...!
특히나 자주 사용되는 filter나 mapping은 딱 봤을 때 이해가 빠른데
forEach문은 좀 더 공부를 해야 할 듯ㅎㅎㅎㅎ....


profile
Here And Now

0개의 댓글