[Python TIL] 2차원 리스트(배열) 입력받는 다양한 방법

KiwiChipKiwiChip
3 min read

Python에서 2차원 리스트(행렬, matrix)를 입력받는 방법을 정리해볼게요.
입력 방식은 여러 가지가 있으며, 그중 중간에 빈 줄이 있는 경우를 처리하는 방법도 함께 알아보겠습니다! 🚀


✅ 2차원 리스트(배열) 입력받는 기본적인 방법

🔹 방법 1: for 문을 사용하여 고정된 크기의 행렬 입력받기

입력 크기가 정해져 있다면 가장 직관적인 방법입니다.

matrix = [list(map(int, input().split())) for _ in range(3)]
print(matrix)

🔹 입력 예시:

1 2 3
4 5 6
7 8 9

🔹 출력:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

사용 용도: 행 개수가 정해져 있을 때 유용


🔹 방법 2: sys.stdin.read()를 사용하여 가변적인 크기의 입력 처리

import sys
data = sys.stdin.read().strip().split("\n")  # 여러 줄 입력받기
matrix = [list(map(int, row.split())) for row in data]
print(matrix)

🔹 입력 예시:

1 2 3
4 5 6
7 8 9

🔹 출력:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

사용 용도: 입력 개수를 미리 모를 때 사용


🚀 ✅ 빈 줄이 포함된 2차원 리스트 입력받기

🔹 문제: 입력값에 중간에 빈 줄이 있을 때, 이를 무시하고 행렬을 읽어야 한다.

1 2 3
4 5 6
7 8 9

2 3 4
5 6 7
8 9 10

💡 이때, 빈 줄을 무시하고 두 개의 행렬을 제대로 분리해서 입력받는 방법이 필요합니다!


✅ 해결 방법 1️⃣: while 루프를 활용하여 빈 줄 무시

matrix1 = []
matrix2 = []

# 첫 번째 행렬 입력 (빈 줄 무시)
while len(matrix1) < 3:
    row = input().strip()
    if row:  # 빈 줄이 아니면 추가
        matrix1.append(list(map(int, row.split())))

# 두 번째 행렬 입력 (빈 줄 무시)
while len(matrix2) < 3:
    row = input().strip()
    if row:  # 빈 줄이 아니면 추가
        matrix2.append(list(map(int, row.split())))

print(matrix1)
print(matrix2)

🔹 입력 예시:

1 2 3
4 5 6
7 8 9

2 3 4
5 6 7
8 9 10

🔹 출력:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[2, 3, 4], [5, 6, 7], [8, 9, 10]]

사용 용도: 빈 줄을 건너뛰면서 일정 개수의 행렬을 입력받고 싶을 때 유용


✅ 해결 방법 2️⃣: sys.stdin.read()를 사용하여 한 번에 입력받고 빈 줄 제거

import sys

data = sys.stdin.read().strip().split("\n")  # 전체 입력을 받아 줄 단위로 분할
data = [row.strip() for row in data if row.strip()]  # 빈 줄 제거

matrix1 = [list(map(int, data[i].split())) for i in range(3)]
matrix2 = [list(map(int, data[i + 3].split())) for i in range(3)]

print(matrix1)
print(matrix2)

🔹 입력 예시:

1 2 3
4 5 6
7 8 9

2 3 4
5 6 7
8 9 10

🔹 출력:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[2, 3, 4], [5, 6, 7], [8, 9, 10]]

사용 용도: 입력 개수를 모를 때, 한 번에 모든 데이터를 처리하고 싶을 때 사용


🎯 어떤 방법을 선택할까?

방법특징장점단점
for 문 사용입력 개수 고정직관적, 간단함유동적인 입력 처리 어려움
sys.stdin.read()EOF까지 입력받기대량 데이터 처리에 적합모든 데이터를 한꺼번에 처리해야 함
while 루프빈 줄 무시 가능유연한 입력 처리코드가 길어질 수 있음

🔥 정리

  1. 입력 개수가 정해져 있다면for 문 사용

  2. 입력 개수가 미정이면sys.stdin.read() 활용

  3. 빈 줄을 포함한 입력 처리while 루프 or sys.stdin.read()+strip()

0
Subscribe to my newsletter

Read articles from KiwiChip directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

KiwiChip
KiwiChip

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).