본문 바로가기
Algorithm/Programmers

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

by 홍월이_ 2022. 12. 23.

시작하며...

모든 알고리즘 문제 풀이는 제가 직접 짜서 정답을 맞춘 결과만을 공유합니다.

마지막 'More Solution'은 다른 정답자들 풀이 중 생각지 못했던 부분들이나 좋게 느껴진 풀이법 몇개를 가져와서 공유하였습니다.

 

[Level 1] 행렬의 덧셈

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

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

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예

 

My Solution

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

 행과 열의 크기가 같은 두 행렬을 입력받아 행렬 덧셈을 하는 문제이다.

  • 이중 for 문을 구현, 각 줄을 list라는 임시 list 생성된 리스트에 저장
  • arr[ i ][ j ]의 값들을 꺼내서 더하고 answer에 append 해서 반환하는 방법으로 했다.

최대한 파이썬 기본 문법을 활용하려고 반복문을 돌았지만...위처럼 하면 3차원 이상의 행렬은 풀이가 되지 않는다..

사실 아래 코드처럼 numpy를 활용하는 방법이 가장 간단하고 좋다. 

import numpy as np
def solution(A,B):
    A=np.array(A)
    B=np.array(B)
    answer=A+B
    return answer.tolist()

 

More Solution

def sumMatrix(A,B):
    return [list(map(sum, zip(*x))) for x in zip(A, B)]

map 과 zip을 활용해서 한줄로 구현한게 너무 대단...!!

 

...끝!

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

댓글