코딩테스트연습/프로그래머스

[프로그래머스 - JAVA] 행렬의 덧셈

:)jun 2021. 11. 20. 13:21

https://programmers.co.kr/learn/courses/30/lessons/12950

 

코딩테스트 연습 - 행렬의 덧셈

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

programmers.co.kr

//테스트 코드

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class Quiz1_행렬의덧셈Test {
	
	Quiz1_행렬의덧셈 q;

	@BeforeEach
	void setUp() throws Exception {
		q = new Quiz1_행렬의덧셈();
	}

	@Test
	void testTwoByTwo() {
		assertArrayEquals(new int[][]{{4,6},{7,9}}, q.solution(new int[][] {{1,2},{2,3}},new int[][]{{3,4},{5,6}}));
	}
	@Test
	void testTwoByOne() {
		assertArrayEquals(new int[][]{{4},{6}}, q.solution(new int[][] {{1},{2}},new int[][]{{3},{4}}));
	}
}

// 프로덕션 코드


public class Quiz1_행렬의덧셈 {
	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[i].length; j++) {
				answer[i][j] = arr1[i][j] + arr2[i][j];
			}
		}
        return answer;
    }
}

// 성공! 처음 보는 사람도 쉽게 이해할 수 있도록 리팩토링!

public class Quiz1_행렬의덧셈 {
	public int[][] solution(int[][] arr1, int[][] arr2) {
		int[][] answer = new int[sizeOfRow(arr1)][sizeOfColomn(arr1)];
		sumOfMatrix(arr1, arr2, answer);
        return answer;
    }

	private void sumOfMatrix(int[][] arr1, int[][] arr2, int[][] answer) {
		for(int i=0; i<sizeOfRow(arr1); i++) {
			for(int j=0; j<sizeOfColomn(arr1); j++) {
				answer[i][j] = arr1[i][j] + arr2[i][j];
			}
		}
	}

	private int sizeOfColomn(int[][] arr1) {
		return arr1[0].length;
	}

	private int sizeOfRow(int[][] arr1) {
		return arr1.length;
	}
}

// 굿!