Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 두 행렬의 합 구하기: 중첩 루프와 리스트 컴프리헨션 활용법

사용자로부터 입력받은 두 개의 행렬이 주어졌을 때, 두 행렬의 합을 계산하여 출력하는 것이 이 프로그램의 목표입니다. 행렬의 덧셈은 같은 위치에 있는 원소끼리 서로 더하는 연산으로, 파이썬에서는 중첩 반복문리스트를 활용하면 손쉽게 구현할 수 있습니다.

알고리즘

1단계: 두 개의 행렬을 입력받는다.
2단계: 중첩 for 루프를 사용하여 각 행과 열을 순회한다.
3단계: 각 반복마다 두 행렬의 대응하는 원소를 더한 뒤, 그 결과를 저장한다.

예제 코드

# 중첩 루프를 사용하여 두 행렬을 더하는 프로그램

A = []
n = int(input("N x N 행렬의 N 값 입력 : "))   # 여기서는 3을 입력
# 2차원 배열(행렬)을 저장하기 위한 리스트
print("원소를 입력하세요 ::>")
for i in range(n):
    row = []                                  # 한 행을 임시로 저장할 리스트
    for j in range(n):
        row.append(int(input()))              # 입력값을 row 리스트에 추가
    A.append(row)                             # 완성된 행을 A에 추가
print(A)
# [[10, 10, 10], [20, 20, 20], [30, 30, 30]]

# 2차원 배열을 행렬 형태로 출력
print("행렬 형태로 출력")
for i in range(n):
    for j in range(n):
        print(A[i][j], end=" ")
    print()                                   # 줄바꿈

B = []
n = int(input("N x N 행렬의 N 값 입력 : "))   # 여기서는 3을 입력
print("원소를 입력하세요 ::>")
for i in range(n):
    row = []                                  # 한 행을 임시로 저장할 리스트
    for j in range(n):
        row.append(int(input()))              # 입력값을 row 리스트에 추가
    B.append(row)                             # 완성된 행을 B에 추가
print(B)
# [[100, 100, 100], [200, 200, 200], [300, 300, 300]]

# 2차원 배열을 행렬 형태로 출력
print("행렬 형태로 출력")
for i in range(n):
    for j in range(n):
        print(B[i][j], end=" ")
    print()                                   # 줄바꿈

result = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
# 행(row) 순회
for i in range(n):
    # 열(column) 순회
    for j in range(len(A[0])):
        result[i][j] = A[i][j] + B[i][j]

print("결과 행렬 ::>")
for r in result:
    print(r)

실행 결과

N x N 행렬의 N 값 입력 : 3
원소를 입력하세요 ::>
10
10
10
20
20
20
30
30
30
[[10, 10, 10], [20, 20, 20], [30, 30, 30]]
행렬 형태로 출력
10 10 10 
20 20 20 
30 30 30 
N x N 행렬의 N 값 입력 : 3
원소를 입력하세요 ::>
100
100
100
200
200
200
300
300
300
[[100, 100, 100], [200, 200, 200], [300, 300, 300]]
행렬 형태로 출력
100 100 100 
200 200 200 
300 300 300 
결과 행렬 ::>
[110, 110, 110]
[220, 220, 220]
[330, 330, 330]

더 간결한 방법: 리스트 컴프리헨션 활용

중첩 루프 대신 파이썬다운 리스트 컴프리헨션zip() 함수를 사용하면 같은 로직을 훨씬 짧은 코드로 작성할 수 있습니다.

# 인덱스 기반 리스트 컴프리헨션
result = [[A[i][j] + B[i][j] for j in range(len(A[0]))] for i in range(len(A))]

# zip() 함수 활용
result = [[a + b for a, b in zip(rowA, rowB)] for rowA, rowB in zip(A, B)]

두 방식 모두 동일한 결과를 반환하지만, 리스트 컴프리헨션 방식이 더 간결하고 파이썬 스타일(Pythonic)에 가깝다는 평가를 받습니다. 반면 초보자에게는 중첩 루프 방식이 행렬 덧셈의 동작 원리를 한 단계씩 눈으로 확인할 수 있어 학습에 더 유용합니다. 상황에 맞게 두 방법을 골라 사용해 보세요.