-
[2일차](문제 번호 : 2738, 행렬 덧셈) 도전백준 문제 풀이 2023. 7. 19. 21:55
1. 문제 요약
N*M크기의 두 행렬 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
2. 풀어보기
리스트 안에 리스트를 만들어 2차원으로 배열하면 될 것 같았다.
예를 들면,
1 2
3 4
5 6 은
[[1,2], [3,4], [5,6]]으로 나타내는 것이다.
따라서 코드는 다음과 같이 작성했다.
N, M = map(int, input().split())
A = [[] for _ in range(N)]
B = [[] for _ in range(N)]
C = [[] for _ in range(N)]
for i in range(N):
A[i] = list(map(int, input().split()))
for i in range(N):
B[i] = list(map(int, input().split()))
for i in range(N):
for j in range(M):
C[i].append('X')
C[i][j] = A[i][j] + B[i][j]
print(C[i][j], end = ' ')
print()정답이었다.
2차원적인 계산은 for문 두 개를 활용하여 하면 된다는 것을 알았다.
이걸 통해 n차원 계산은 for문 n 개를 활용하면 될 것 같다는 생각이 들었다.
3. 개선 방안
맞힌 사람들의 코드를 봐도 나와 언뜻 비슷했다.다만 다른 점이라면, 나는 C라는 새 리스트를 만들어, 거기에 덧셈의 결과를 옮겨 적은데 반해,다른 유저들은 A에 직접적으로 B를 더한 것이었다. 이렇게 하면 확실히 코드의 길이를 줄일 수 있었다.또한, input() 대신 sys.stdin.readline() 을 통해 빠르게 input 하여 for문이기에 소요시간을 줄인 것을 볼 수 있었다.
4. 얻어가는 것
1. 코드의 길이와 시간을 줄일 수 있는 방법
1) 새로운 리스트 만드는 행위를 줄이기
2) sys.stdin.readline 활용하기
'백준 문제 풀이' 카테고리의 다른 글
[5일차](문제 번호 : 2536, 색종이) 도전 (0) 2023.07.22 [4일차](문제 번호 : 2566, 최댓값) 도전 (0) 2023.07.21 [3일차](문제 번호 : 10798, 세로읽기) 도전 (0) 2023.07.20 [1일차](문제 번호 : 1316, 그룹 단어 체커) 도전 (0) 2023.07.18 [0일차](문제 번호 : 2941, 크로아티아 알파벳) 도전 (0) 2023.07.17