[백준][python] 2738 행렬 덧셈 ✅
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)으로 설정해서 틀린거였다,,...