코딩 테스트/Level 1
20. 행렬의 덧셈
컴닥
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;
}
}
반응형