백준 2738번 풀이

BOJ/[BOJ] Python 2022. 11. 14. 23:30
반응형

문제

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
Lv. 36 라이츄

Lv. 36 라이츄

광고 매크로 없는 청정한 블로그를 위해 노력중입니다. 근데 나만 노력하는 것 같음… ㅡㅡ

방명록