Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MAX
- IS NOT NULL
- ifnull
- GROUP BY
- MySQL
- SubQuery
- order by
- 투자자산운용사
- IN
- is null
- Round
- Python
- 해외결제
- SQL
- where
- 도서추천
- inner join
- 트래블테크
- join
- having
- alias
- 날짜 포맷
- 금융IT
- programmers
- date_format
- LIMIT
- 금융 플랫폼
- count
- 서브쿼리
- IELTS
Archives
- Today
- Total
Every Step Matters
[Python] 넘파이 없이 2차원 배열 생성하기 / 백준 ModuleNotFoundError 본문
백준 2738번 문제

해당 문제를 풀기 위해 numpy를 이용해 빈 행렬 A, B를 생성했더니 결과 제출 시 '런타임 에러(ModuleNotFoundError)'가 났다.
ModuleNotFoundError가 뭔지 찾아보니... 다음과 같이 설명이 되어 있었다.

즉 백준에서는 파이썬 외부 라이브러리를 사용하여 결과를 제출할 수 없다는 것이었다.
그래서 numpy 모듈 없이 빈 2차원 행렬을 생성하는 방법을 알아보았다.
빈 2차원 배열/행렬 생성하기
1. List Comprehension(리스트 내포) 사용
# m x n 빈 2차원 행렬 생성
m, n = 3, 4
matrix0 = [[0] * n for _ in range(m)]
matrix1 = [[1] * n for _ in range(m)]
print(matrix0) # 출력: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
print(matrix1) # 출력: [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
2. for문 사용
# m x n 빈 2차원 행렬 생성
m, n = 3, 4
matrix0 = [] # 1차원 배열 우선 생성
matrix1 = []
for i in range(m):
matrix0.append([0] * n) # 1차원 배열 안에 새로운 1차원 배열 추가
matrix1.append([1] * n)
print(matrix0) # 출력: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
print(matrix1) # 출력: [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
3. numpy 모듈 사용
물론 가장 간단한 방법은 numpy 모듈을 사용하는 것이다.
# m x n 빈 2차원 행렬 생성
import numpy as np
m, n = 3, 4
matrix0 = np.zeros((m,n))
matrix1 = np.ones((m,n))
print(matrix0) # 출력: [[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]
print(matrix1) # 출력: [[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]
*numpy 모듈을 사용한 다양한 행렬 생성 방법은 아래 참고
백준 2738 문제 - 행렬 덧셈
이렇게 numpy 없이 빈 행렬 생성까지 성공하고 백준 2738 문제를 풀던 중 마지막 행렬 덧셈 부분에서도 문제가 생겼다.
numpy를 사용했을 때처럼 두 행렬을 '+'를 사용하여 더하면 행렬의 덧셈이 되지 않고 두 배열을 단순이 '연결(concatenation)'하게 된다는 것이었다. 따라서 행렬의 덧셈도 다른 방식으로 진행해 주었다. for문을 사용하여 각 원소값끼리 더해주고 그 값을 새로운 빈 2차원 행렬 sum의 해당 원소 위치에 대입해주었다.
#2738 - input(). numpy 없이.
n, m = map(int, input().split())
a = [] # 빈 1차원 배열 생성
b = [] # 빈 1차원 배열 생성
for i in range(n): # 빈 2차원 배열 생성방법 1
m_list = list(map(int, input().split()))
a.append(m_list)
for i in range(n):
m_list = list(map(int, input().split()))
b.append(m_list)
# 두 행렬의 덧셈
sum = [[0]*m for i in range(n)] # 빈 2차원 배열 생성방법 2
for i in range(n):
for j in range(m):
sum[i][j] = a[i][j] + b[i][j] # i행 j열 원소끼리 더해준 값을 sum의 i행 j행 원소에 대입
# 출력 방식 맞추기
for i in sum:
i = list(map(int, i))
i = list(map(str, i))
print(' '.join(i))
아래는 처음에 넘파이 모듈을 사용하여 풀었던 백준 2738문제 코드. 넘파이 사용시 두 행렬의 덧셈은 '+'를 이용하여 간단하게 해결 가능하다.
#2738 - input(), numpy 사용 버전
import numpy as np
n, m = map(int, input().split())
a = np.empty((n,m))
b = np.empty((n,m))
for i in range(n):
m_list = list(map(int, input().split()))
for idx, j in enumerate(m_list):
a[i,idx] = j
for i in range(n):
m_list = list(map(int, input().split()))
for idx, j in enumerate(m_list):
b[i,idx] = j
# 두 행렬의 덧셈
sum = a+b
# 출력 방식 맞추기
for i in sum:
i = list(map(int, i))
i = list(map(str, i))
print(' '.join(i))
'Python' 카테고리의 다른 글
| [Colab] 파이썬 데이터 시각화할 때 한글 폰트 깨짐 해결 방법 (0) | 2026.01.09 |
|---|---|
| [Python] 파이썬 실행 방식 두가지 (0) | 2025.11.23 |
| [python] 주피터노트북 sys.stdin.readline() 실행안됨 / 표준입력 / input()과의 차이점 (0) | 2024.08.14 |
| [python] 재귀함수 이해하기 / 두 개의 재귀 호출을 포함하는 경우 (0) | 2024.08.12 |
| [python] &와 and의 차이 (0) | 2024.08.12 |