[test] 행렬의 덧셈 - 파이썬

joygoround·2020년 4월 22일
0

Coding Test

목록 보기
25/42

Q.

문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예
arr1	arr2	return
[[1,2],[2,3]]	[[3,4],[5,6]]	[[4,6],[7,9]]
[[1],[2]]	[[3],[4]]	[[4],[6]]

my solution


def solution(arr1, arr2):
    answer = [[] for x in range(len(arr2))]
    for i in range(len(arr1)):            # 세로 크기
        for j in range(len(arr1[i])):     # 가로 크기
            answer[i].append(arr1[i][j] + arr2[i][j])
    
    
    return answer
  1. 빈 리스트를 만들고 [] 의 개수를 arr1 ( or arr2) 의 길이와 같게 설정한다.

  2. 반복문을 활용해서 2차행렬의 각 요소에 접근하는 식을 세우고

  3. 빈 리스트의 인덱스 i에 각 행렬의 해당 인덱스 값을 더한 값을 붙여준다.

다른 풀이

1.


def sumMatrix(A,B):
    for i in range(len(A)) :
        for j in range(len(A[0])):
            A[i][j] += B[i][j] 
    return A




def sumMatrix(A,B):
    answer = [[A[i][j] + B[i][j] for j in range(len(A[0]))] for i in range(len(A))]

논리는 같은데 더 간단함. A함수에 값을 계속 더해줘서 바로 리턴가능하게.

2.

def sumMatrix(A,B):
    answer = [[c + d for c, d in zip(a, b)] for a, b in zip(A,B)]
    return answer

Zip 활용

참고

list comprehension을 활용하면 원하는 리스트 만들기가 정말 편하다.
zip을 활용해서 2개 이상의 리스트를 활용해서 원하는 리스트를 만들 수 있다.
빈 2차원 리스트에 값을 넣으려면 a[0].append(1)를 사용한다. (a[0][0] = 1는 IndexError 발생

profile
roundy

0개의 댓글