본문 바로가기

TIL

[240227] SQL: 코드카타 141~142 & 파이썬: 코드카타 37

[파이썬 코드카타]

행렬의 덧셈

https://school.programmers.co.kr/learn/courses/30/lessons/12950

 

1) 어떤 문제가 있었나

2중 리스트로 이뤄진 2개의 행렬의 각 원소를 더해서 반환하는 문제 

2) 내가 시도해본 건 무엇인가

지난주 코드카타를 통해 배운 for문 + zip 함수를 활용해 arr1과 arr2를 동시에 출력한 뒤, 

동일한 위치에 있는 원소들의 합계 값을 구하고자 했으나 각 값을 리스트 안에 리스트에 적절히 넣기 어려웠음

arr1 = [[1,2],[2,3]]
arr2 = [[3,4],[5,6]]
# return = [[4,6],[7,9]]

# index 순서를 활용
for i in range(len(arr1)):
    for j in range(len(arr1[i])):
        print(arr1[i][j] + arr2[i][j])

# zip 함수를 활용  
for i, j in zip(arr1, arr2):
    for n, m in zip(i, j):
        print(n + m)

# 출력 값은 동일함
# 4
# 6
# 7
# 9


3) 어떻게 해결했나

- 각 for문이 끝날 때마다 어떤 값이 나오는지 헷갈려서, print(i, j), print(k) 등을 중간중간 기입

- 반환 값을 통해 파이썬 루프가 어떻게 돌아가는지 살펴보면서 리스트에 어떻게 담을 수 있을지 고민해봄

- 빈 리스트를 내/외부에 위치시켜 answer1에는 값이 누적되고, answer2에는 1 루프 후 값이 초기화 되도록 설정   

def solution(arr1, arr2):
    answer1 = []
    for i, j in zip(arr1, arr2):
        answer2 = []
        for k in range(len(arr1[0])):
            answer2.append(i[k]+j[k])
        answer1.append(answer2)
    return answer1


4) 무엇을 새롭게 알았나

- list.append() 활용 시, 이런 방식으로도 활용 가능 > answer.append([])

- 한 줄 코드 진행 시 별도 append 없이 중괄호 처리로 진행 가능

# 다른 사람 풀이

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