Programming/python

[파이썬 기초] 파이썬 행렬의 덧셈 - 프로그래머스 Lv1 문제 풀이 | zip, tuple unpacking

방황하는 데이터불도저 2023. 4. 29. 14:56

 

내가 푼 방식

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

 

다른 해결 방법

zip 함수를 이용해라!

 - zip 함수는 두 개 이상의 리스트같은 인덱스(index)의 값끼리 Tuple 자료형으로 묶어주는(packing) 기능을 한다.

 - zip 함수를 활용할 때, Tuple 튜플 자료형에 대한 특성(unpacking하는 법)을 알면 잘 활용할 수 있다.

 - https://kyull-it.tistory.com/126

 

[Python Basics] 파이썬 자료형의 모든 것!

1. 숫자 - int : 정수형 - float : 실수형 i = 123 type(i) # # 가능한 자료형 변환 (float도 동일) int(i) # 123 float(i) # 123.0 str(i) # '123' repr(i) # '123' bool(i) # True if i == None: bool(i) # False [i] # [123] < 이렇게 list로 생

kyull-it.tistory.com

 

이러한 특징으로, 아래의 예시처럼 zip 함수를 활용할 수 있다.

arr1 = [[1,2], [2,3]]
arr2 = [[3,4], [5,6]]

zip(arr1, arr2)
# Output
# <zip object at 0x0000027ED4ECF700>

for x in zip(arr1, arr2):
	print(x)
# Output
# ([1, 2], [3, 4])
# ([2, 3], [5, 6])

for x in zip(arr1, arr2):
    for y in zip(*x):
        print(y)
    print('-')
# Output
# (1, 3)
# (2, 4)
# -
# (2, 5)
# (3, 6)
# -

for x in zip(arr1, arr2):
    for a,b in zip(*x):
        print(a+b)
    print('-')
# Output
# 4
# 6
# -
# 7
# 9
# -

따라서 이런 솔루션들이 나올 수 있다.

def solution1(arr1, arr2):
	return [[c+d for c, d in zip(a,b)] for a,b in zip(arr1, arr2)]
    
solution1(arr1, arr2)
# output : [[4, 6], [7, 9]]


def solution2(arr1, arr2):
	return [list(map(sum, zip(*x))) for x in zip(arr1, arr2)]
    
solution2(arr1, arr2)
# output : [[4, 6], [7, 9]]