알고리즘(algo)/백준
[백준] 2738번 - 행렬 덧셈(2차원 배열)
dDong2
2023. 1. 13. 10:18
참고: https://www.acmicpc.net/problem/2738
✔️ 문제
2차원 배열, 행렬에 관한 문제이다.
✔️ 풀이
문제를 우선 이해해야하는데,
3x3 행렬, 3x3의 2차원 배열이 주어졌을 때
행렬 A는 1 1 1
2 2 2
0 1 0
행렬 B는 3 3 3
4 4 4
5 5 100
이라는 값을 가지고 있다고 해석할 수 있다.
이렇게 됐을 때 각 A와 B 행렬의 (0,0) (0,1) (0,2)끼리
더해가지고 1+3 1+3 1+3은 4 4 4라는 3x3의
새로운 행렬을 출력하면 풀리는 문제이다.
import sys
n,m=map(int,sys.stdin.readline().strip().split())
A=[list(map(int,sys.stdin.readline().strip().split())) for _ in range(n)]
B=[list(map(int,sys.stdin.readline().strip().split())) for _ in range(n)]
for i in range(n):
for j in range(m):
print(A[i][j]+B[i][j], end=' ')
print()
코드는 다음과 같이 작성하였는데,
어차피 받는 행은 입력 값이므로 열에 해당하는 n만큼을
리스트 컴프리헨션으로 2차원 배열을 만들어주었다.
그리고나서 각 A와 B 배열의 인덱스를 더해준 값을
바로 print로 출력하게끔 만들었는데,
효율적이지 못한 코드라고 생각이 들었다.
실제로 맞은 결과도 44ms에 302B라는 시간과 코드 길이를 확인할 수 있다.
40ms 시간에 276B라는 짧은 시간과 코드 길이를 가진
모범 답안을 살펴보았을 때 코드의 흐름은 비슷하지만,
코드가 간단하게 정리되어 있는 것을 확인할 수 있고
a에 바로 더해준다음 *i를 바로 출력하는 것을 확인할 수 있었다.
맞힌 사람들의 코드를 확인하는 것도
좋은 식견을 넓히는 방법이자 공부인 것 같다.
화이팅 💪