BOJ

[백준][python] 2738 행렬 덧셈 ✅

winter17 2023. 2. 1. 00:06

https://www.acmicpc.net/problem/2738

 

2738번: 행렬 덧셈

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같

www.acmicpc.net


🌱 행렬 덧셈과 뺄셈

행렬의 덧셈과 뺄셈

우선 행렬의 덧셈과 뺄셈에 대한 이해를 해야 하는데

행렬의 덧셈과 뺄셈을 할 때는 반드시 같은 위치에 있는 원소끼리만 더하거나 뺄 수 있다!!


풀이 과정

1. 첫째 줄에 행렬의 크기 N과 M을 공백으로 구분하여 입력을 받는다 

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

    : 여기서부터 문제를 이해 못 해서 한참 헤맸는데 A가 갑자기 왜 등장하는지, 그게 뭔지 몰랐는데 

      'A라는 이차원 리스트를 생성하라 = 행렬 A'라는 말이었다..

A = [
    [1, 1, 1],
    [2, 2, 2],
    [0, 1, 0]
]
# 위의 이차원 리스트로 구현하려면 아래와 같이 작성해준다!
A = [list(map(int, input().split())) for _ in range(N)]

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

B = [
    [3, 3, 3],
    [4, 4, 4],
    [5, 5, 100]
]
# 2번처럼 코드를 구현하면 되는데 그것보다는 for문 안에서 B를 하나씩 받아주는게 좋을 것 같다

4. 최종 코드 : for문 안에서 B리스트를 받고 A와 B의 같은 위치를 잡아서 더한 후 출력!! 

N, M = map(int, input().split())  # 3 3

A = [list(map(int, input().split())) for _ in range(N)]

for i in range(N):  # 리스트의 원소(리스트)가 3개
    B = list(map(int, input().split()))
    # [3, 3, 3] [4, 4, 4] [5, 5, 100]
    for j in range(M):  # 원소(리스트속 리스트의 원소)가 M개
        print(A[i][j] + B[j], end=" ")
    print()

리뷰

행렬을 이해하는 것도 힘들었고 예제를 입력했을 때 왜 예제 출력처럼 나오는지부터 막혀서 그냥 포기할까 하다가

결국은 풀었는데 알고 보니 행렬 덧셈방식이 따로 있더라... 

위의 풀이과정(두 번째 시도)에서 기술한 대로 풀었더니 해결되었다 

# 틀린 코드였는데 수정함
N, M = map(int, input().split())  # 3 3

A = [list(map(int, input().split())) for _ in range(N)]
# range(N) 여기서 N인 이유는 문제에서 N개의 줄이라고 명시했으니까!
#A = [
#    [1, 1, 1],
#    [2, 2, 2],
#    [0, 1, 0]
#]
B = [list(map(int, input().split())) for _ in range(N)]
#B = [
#    [3, 3, 3],
#    [4, 4, 4],
#    [5, 5, 100]
#]
# A와 B의 합을 구하기
for i in range(N): # 이 부분에서 실수함! N이어야하는데 M이라고 설정해버려서 발생한 오류였음
    for j in range(M):
        print(A[i][j] + B[i][j], end=" ")
    print()  # 한 줄에 출력되는 것을 방지하고자 개행

첫 번째 시도 때 A, B의 이차원 리스트를 각각 만들어서 for문 돌린 후 같은 위치를 지정해 더하는 방식으로 진행했고

vscode에서는 값이 출력됐지만 백준에서는 틀렸다고 나와서 왜 그런지는 모르겠지만...ㅠ

왜 틀렸냐면 이중 for문 중 첫번째 for문의 range(N)이어야 하는데 range(M)으로 설정해서 틀린거였다,,...