ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20. 행렬의 덧셈
    코딩 테스트/Level 1 2019. 10. 18. 15:49
    반응형

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

     

    파이썬

    기본적인 풀이입니다. 

    def solution(arr1, arr2):
        answer = []
        for i in range(len(arr1)):
            answer.append([])
            for j in range(len(arr1[i])):
                answer[i].append(arr1[i][j] + arr2[i][j])
        return answer

    리스트 컴프리헨션을 사용해서 줄일 수도 있습니다만 점점 가독성이 안 좋아집니다. 

    리스트 컴프리헨션을 2중으로 쓰는 것은 좋지 않습니다. 

    def solution(arr1, arr2):
        answer = []
        for i in range(len(arr1)):
            answer.append([arr1[i][j] + arr2[i][j] for j in range(len(arr1[i]))])
        return answer
    def solution(arr1, arr2):
        return [[arr1[i][j] + arr2[i][j] for j in range(len(arr1[i]))] for i in range(len(arr1))]

    그럼 다른 방법은 뭐가 있을까요? zip()을 이용해서 줄여보는 건 어떨까요? 

    이것도 2중 for 문이라 가독성이 좋다고는 할 수 없습니다만, 인덱스가 없기 때문에 좀 더 깔끔합니다. 

    def solution(arr1, arr2):
        return [[el1 + el2 for el1, el2 in zip(row1, row2)] for row1, row2 in zip(arr1, arr2)]

     

    자바스크립트

    함수형으로 풀어봅니다. 

    자바스크립트는 특이하게(?) 인덱스가 나옵니다. 

    function solution(arr1, arr2) {
            return arr1.map((e1, i) => e1.map((e2, j) => e2 + arr2[i][j]))
    }

     

    자바

    기본적인 해법으로 풀어봤습니다. 

    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;
        }
    }

     

    코틀린

    자바스크립트와 유사합니다. 

    https://medium.com/@dambyworld/%EC%9E%90%EB%B0%94%EC%9D%98-mapindexed-%EC%BD%94%ED%8B%80%EB%A6%B0%EC%9D%98-mapindexed-eae16d2d1150

    class Solution {
        fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
            return arr1.mapIndexed { i, e1 -> e1.mapIndexed { j, e2 -> e2 + arr2[i][j] }.toIntArray() }.toTypedArray()
        }
    }

     

    func solution(arr1 [][]int, arr2 [][]int) [][]int {
    	r := make([][]int, len(arr1))
    	for i := 0; i < len(arr1); i++ {
    		r[i] = make([]int, len(arr1[i]))
    		for j := 0; j < len(arr1[i]); j++ {
    			r[i][j] = arr1[i][j]+arr2[i][j]
    		}
    	}
    	return r
    }

     

    C#

    public class Solution
    {
        public int[,] solution(int[,] arr1, int[,] arr2)
        {
            int[,] answer = new int[arr1.GetLength(0), arr1.GetLength(1)];
            for (int i = 0; i < arr1.GetLength(0); i++)
                for (int j = 0; j < arr1.GetLength(1); j++)
                    answer[i, j] = arr1[i, j] + arr2[i, j];
            return answer;
        }
    }

     

    반응형
Designed by Tistory.