본문 바로가기
코딩테스트

[lv1] 행렬의 덧셈: 통과 X

by busybee-busylife 2024. 2. 6.
반응형
def solution(arr1, arr2):
    answer = [[]]

    for i in range(len(arr1)):
        for j in range(len(arr1[0])):
            answer.append(arr1[i][j] + arr2[i][j])
    print(answer)
    return answer

##>>>> output <<<<##
입력값 〉 [[1, 2], [2, 3]], [[3, 4], [5, 6]]
기댓값 〉 [[4, 6], [7, 9]]
실행 결과 〉실행한 결괏값 [[],4,6,7,9]이 기댓값 [[4,6],[7,9]]과 다릅니다.
출력 〉 [[], 4, 6, 7, 9]

 

정답 행렬(answer)의 shape 잡는 방법을 몰라 헤맸다.

덧셈 연산 결과가 전부 마지막 요소 위치에 몰려서 append 되는데, 해결 방법을 몰라 결국 ChatGPT에게 물어봤다. 

 

 

 

 

 

##### ChatGPT #####
def solution(arr1, arr2):
    # arr1와 같은 차원으로 answer를 초기화합니다.
    answer = [[0] * len(arr1[0]) for _ in range(len(arr1))]
    
    for i in range(len(arr1)):
        for j in range(len(arr1[0])):
            # 해당하는 요소들을 더하고 결과를 answer에 저장합니다.
            answer[i][j] = arr1[i][j] + arr2[i][j]
    
    return answer

answer = [[0] * len(arr1[0]) for _ in range(len(arr1))]

answer의 shape을 먼저 잡아준다( 0으로 채우기 )

  for _ in range(len(arr1))]: arr1의 행 수 만큼 반복 

  [0] * len(arr1[0]): arr1의 열 수 만큼 0을 채운다 

 

answer[i][j] = arr1[i][j] + arr2[i][j]

그리고나서 answer에 append 하는게 아니라 덧셈 연산 값을 바로 넣어준다

 

 

 

 

 

 

#### 다른사람 풀이 ####
def solution(A,B):
    for i in range(len(A)):
        for j in range(len(A[0])):
            A[i][j] += B[i][j]

    return A

새로운 행렬을 만들 필요 없이, 위치만 잘 잡아서 첫번째 행렬(A)에 두번째 행렬(B)을 더해준다.....! 

 

 

반응형