barcode

백준 2738번 풀이

BOJ/[BOJ] Python

문제

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

 

2738번: 행렬 덧셈

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

www.acmicpc.net

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

 

Reference

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

 

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

'본 포스팅은 글쓴이 개인의 공부 목적이므로, 틀린 부분이 있다면 댓글로 달아주시면 감사하겠습니다.' 오늘은 2차원 리스트에 대해 알아보겠다. 1. 2차원 리스트의 구조 2차원 리스트는 1차원

minjoos.tistory.com

https://develop247.tistory.com/93

 

[파이썬/Python] 백준 2738번 행렬 덧셈

[파이썬/Python] 백준 2738번 행렬 덧셈 www.acmicpc.net/problem/2738 2738번: 행렬 덧셈 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개

develop247.tistory.com

 

풀이

이거 진짜 잘못하면 곱하기 나오것다... 아무튼. 행렬의 덧셈은 개 심플한데 걍 행렬 두개를 더하면 된다. 좌표 상응하는거 걍 더하고 빼면 떙인데 이제 곱하기 나누기 들어가면 골치아픔... 아무튼. 이런 행렬의 연산은 두 행렬의 크기가 같다는 전제 하에 진행된다. 그래서 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차원 배열이 된다)

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 11382번 풀이  (0) 2023.05.28
백준 2587번 풀이  (0) 2022.11.15
백준 5597번 풀이  (0) 2022.11.13
백준 10807번 풀이  (0) 2022.11.13
백준 10815번 풀이  (0) 2022.10.12