본문 바로가기

알고리즘 예시/백준

[Baekjoon] 백준 #2738번 파이썬 해답

320x100
백준의 단계별 풀어보기 2차원 배열

행렬의 덧셈은 어떻게 만들까요

 

먼저 이번 문제부터 살펴보겠습니다. 출력자체는 단순합니다.

 

문제 읽기

 

문제 N*M크기의 두 행렬 A와 B가 주어졌을 때,

두 행렬을 더하는 프로그램을 작성하시오.

 

입/출력

 

첫째 줄에 행렬의 크기 N 과 M이 주어진다.

둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다.

이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다.

N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

 

첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다.

행렬의 각 원소는 공백으로 구분한다.

 

3 3
1 1 1
2 2 2
0 1 0
3 3 3
4 4 4
5 5 100
4 4 4
6 6 6
5 6 100

 

해답

 

N, M = map(int, input().split())
행렬A, 행렬B = [], []

for i in range(N):
    i = list(map(int, input().split()))
    행렬A.append(i)
    
for i in range(N):
    i = list(map(int, input().split()))
    행렬B.append(i)

for i in range(N):
    for j in range(M):
        print(행렬A[i][j] + 행렬B[i][j], end =' ')
    print('')

 

어떻게 풀면 좋을까요?

 

 

리스트 추가와 인덱싱을 사용할 예정입니다.

 

.append를 사용해, 여기서 활용할 행렬을 만듭니다.

 

N, M = map(int, input().split())
행렬A, 행렬B = [], []

for i in range(N):
    i = list(map(int, input().split()))
    행렬A.append(i)
    
for i in range(N):
    i = list(map(int, input().split()))
    행렬B.append(i)

 

그럼 행렬A와 행렬B에 리스트로 숫자가 쌓이게 됩니다.

아래는 예시입니다. 더 다양한 숫자를 넣어서 행렬이 만들어지는 것도

고려해야 합니다.

 

짠.

 

 

그다음에 나오는 숫자들을 입력하면

행렬B에 숫자가 쌓이게 됩니다.

그럼 이제 생각해 봐야 할것은 행렬의 덧셈표현 방법입니다.

 

 

이렇게 A행렬의 (1,1)과 B행렬의 (1,1)을 더하고, A행렬의 (1,2)과 B행렬의 (1,2)를 더하고

·····반복해서 N행 M열까지 더한 것이죠.

 

 

 

for i in range(N):
    for j in range(M):
        print(행렬A[i][j] + 행렬B[i][j], end =' ')
    print('')

 

먼저 range(N) 즉 N행이 도는 동안 range(M) M열을 for문으로 반복시키며

행렬 A의 1행 1열과 행렬 B의 1행 1열부터 더하게 만듭니다.

각 행렬의 값들을 뽑는데 인덱싱을 사용했습니다. 그리고 띄어쓰기를 만들어야 되죠?

end = ' '로 띄어주고, range(M)이 돌기 전에 일종의 줄바꿈으로 print('')를 만들어줍니다.

 

이를 합쳐진 버전입니다.

 

N, M = map(int, input().split())
행렬A, 행렬B = [], []
# 행렬 A를 추가
for i in range(N):
    i = list(map(int, input().split()))
    행렬A.append(i)
# 행렬 B를 추가    
for i in range(N):
    i = list(map(int, input().split()))
    행렬B.append(i)
# 각 행렬간의 덧셈
for i in range(N):
    for j in range(M):
        print(행렬A[i][j] + 행렬B[i][j], end =' ')
    print('')

 

풀이 완.

728x90