-
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; } }
코틀린
자바스크립트와 유사합니다.
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; } }
반응형