백준 2738번 풀이

문제

행렬 덧셈 구하는 문제. 이러다 곱하기 나오는거 아니냐 

Reference

[python] 2차원 리스트 생성 및 입력 받기, 원하는 값 찾기, 탐색, 전치 행렬 (tistory.com)

https://develop247.tistory.com/93

풀이

이거 진짜 잘못하면 곱하기 나오것다… 아무튼. 행렬의 덧셈은 개 심플한데 걍 행렬 두개를 더하면 된다. 좌표 상응하는거 걍 더하고 빼면 떙인데 이제 곱하기 나누기 들어가면 골치아픔… 아무튼. 이런 행렬의 연산은 두 행렬의 크기가 같다는 전제 하에 진행된다. 그래서 1+1로 받는건가 

일단 행렬을 생성하는 방법은 간단하다. 아니 넘파이 치워봐 백준에서 넘파이 못써…

import sys

array = [[i for i in range(3,10,3)] for j in range(3)]

print(array)
import sys

M, N = map(int,sys.stdin.readline().split())

array = [[i for i in range(M)] for j in range(N)]

print(array)

이런 식으로 리스트 컴프리헨션으로도 입력받아서 만들 수 있다. 근데 저거 어떻게 하나 찾아봤더니 죄다 1차원 리스트만 있자나…

아무튼 이 문제는 저걸 기반으로 풀긴 풀어야 하는데, 입력받을 때 두 가지를 고려해야 한다. 첫번째로 행단위로 행렬 원소를 입력받는다는것과 그 행렬 입력이 1+1이라는 것… 아니 농담 아니고 진짜 1+1이여… 한번에 두개 다받음…

import sys

M, N = map(int,sys.stdin.readline().split())

array = [0 for i in range(N)]
array2 = [0 for i in range(N)]
array_sum = [[j for j in range(M)] for i in range(N)]

for i in range(N): 
    array[i] = list(map(int, sys.stdin.readline().split()))

for i in range(N):
    array2[i] = list(map(int, sys.stdin.readline().split()))

for i in range(N):
    for j in range(M):
        array_sum[i][j] = array[i][j] + array2[i][j]

for i in array_sum:
    for j in i:
        print(j,end=" ")
    print("")

그래서 이렇게 했는데 런타임에러 뜨더라니까. 혹시 왜 뜨는지 아시는 분은 제보 바랍니다. (백준은 에러가 떠도 무슨 행에서 뜨는지는 안 알려줌)

import sys

N,M = map(int,sys.stdin.readline().split())

array = []
array2 = []

for i in range(N):
    i = list(map(int, sys.stdin.readline().split()))
    array.append(i)

for i in range(N):
    i = list(map(int, sys.stdin.readline().split()))
    array2.append(i)

for x in range(N):
    for y in range(M):
        print(array[x][y] + array2[x][y], end=' ')
    print()

이건 참고문헌에 있는 코드고

import sys

N,M = map(int,sys.stdin.readline().split())

array3 = [i for i in range(N)]
array4 = [i for i in range(N)]

for i in range(N):
    array3[i] = list(map(int, sys.stdin.readline().split()))

for i in range(N):
    array4[i] = list(map(int, sys.stdin.readline().split()))

for x in range(N):
    for y in range(M):
        print(array3[x][y] + array4[x][y], end=' ')
    print()

컴프리헨션 이걸로 썼음(N만큼 일차원 배열을 만들고 일차원 배열 안에 리스트를 넣으면 2차원 배열이 된다)