파이썬 2차원 배열 완전정복: 행렬과 좌석 배치 예제로 쉽게 배우기
파이썬 2차원 배열 완전정복: 행렬과 좌석 배치 예제로 쉽게 배우기
2차원 배열, 어렵게 느껴지셨나요? 좌석 배치도 예제로 완벽하게 이해해보세요. 실무보다 꼭 필요한 예제로 개념과 활용을 동시에 잡아드립니다!
안녕하세요! 코딩을 처음 접하신 분들도 파이썬의 기본부터 차근차근 배울 수 있도록 안내하고 있는 블로그입니다. 오늘은 많은 분들이 처음에 헷갈려 하는 2차원 배열을 주제로 다뤄보려 해요. 특히 좌석 배치도처럼 우리 일상 속에서 자주 볼 수 있는 형태를 코드로 구현해보면, 배열에 대한 이해가 훨씬 쉬워진답니다.
이 글에서는 2차원 배열 선언 방법부터 행과 열을 활용한 데이터 저장 방식, 그리고 실제 예제를 통한 실습까지 하나하나 짚어보며 설명드릴게요. 배열 개념이 낯설거나, 한 번쯤 정리하고 싶으셨다면 오늘 포스트를 꼭 끝까지 읽어주세요!
목차
1. 2차원 배열이란? 📊
2차원 배열은 말 그대로 행(Row)과 열(Column)로 구성된 표 형태의 데이터 구조입니다. 간단히 말해 리스트 안에 또 다른 리스트가 있는 구조죠. 학교 시간표, 좌석 배치도, 행렬 연산 등 우리 주변에서 흔히 볼 수 있는 데이터 구조입니다.
예를 들어, 아래의 표처럼 생긴 데이터를 프로그래밍에서 표현할 때 2차원 배열이 사용됩니다:
열 1 | 열 2 | 열 3 |
---|---|---|
A | B | C |
D | E | F |
이러한 형태를 코드로 표현하면 아래처럼 됩니다.
array = [
['A', 'B', 'C'],
['D', 'E', 'F']
]
이제부터는 이 2차원 배열이 어떻게 선언되고, 어떻게 데이터를 저장하고 조회하는지 하나씩 살펴보겠습니다. 본격적으로 코딩에 들어가기 전에 꼭 필요한 개념을 먼저 정리해드렸어요!
- 2차원 배열은 리스트 안에 리스트가 있는 구조이다.
- 행(Row)과 열(Column)을 기준으로 데이터를 저장하고 접근한다.
- 현실 세계의 표, 행렬, 좌석 배치 등을 표현할 때 자주 쓰인다.
2. 파이썬에서 2차원 배열 선언하기 ✍️
파이썬에서는 리스트(List)를 중첩해서 2차원 배열을 선언할 수 있습니다. 기본적으로 리스트 안에 또 다른 리스트를 넣는 방식이죠. 아래 예제를 먼저 보시죠!
# 3행 4열의 2차원 배열 생성
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]
이렇게 선언된 matrix
는 총 3개의 행과 4개의 열로 구성되어 있으며, 다음과 같은 구조를 가지고 있어요.
행 번호 | 값 |
---|---|
0 | [1, 2, 3, 4] |
1 | [5, 6, 7, 8] |
2 | [9, 10, 11, 12] |
📌 다양한 방법으로 선언하는 2차원 배열
리스트 내포(List Comprehension)를 이용하면 조금 더 간결하게 2차원 배열을 생성할 수 있어요.
# 3행 4열, 모든 값이 0으로 초기화된 배열
matrix = [[0 for col in range(4)] for row in range(3)]
이 방식은 특히 반복문과 함께 사용할 때 유용하며, 초기화 값이 동일하거나, 특정 규칙이 있을 때 자주 활용됩니다.
- 직접 리스트를 작성해서 선언하는 방법
- 리스트 컴프리헨션을 활용해 반복문 형태로 생성
- 배열 구조를 이해하면 데이터 초기화나 특정 규칙에 따라 유연하게 사용할 수 있음
이제 여러분도 2차원 배열을 선언하는 기본기를 완전히 이해하셨을 거예요. 다음 단계에서는 이 배열을 어떻게 다루고 접근하는지 배워볼게요!
3. 행과 열을 활용한 데이터 접근 방식 🔍
2차원 배열을 선언했다면, 그다음은 당연히 데이터를 어떻게 꺼내서 사용하느냐가 관건이겠죠. 파이썬에서 2차원 배열의 특정 요소에 접근하려면 행 인덱스
와 열 인덱스
를 함께 사용합니다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[0][1]) # 결과: 2
print(matrix[2][2]) # 결과: 9
위의 예제에서 matrix[0][1]
은 0번째 행의 1번째 열을 의미하며, 값은 2
입니다. matrix[2][2]
는 마지막 행의 마지막 열에 해당하죠.
🧠 인덱스를 이해하는 것이 핵심!
-
array[row][col]
형태로 접근 - 인덱스는 0부터 시작하므로 첫 번째 요소는
[0][0]
- 배열 크기를 넘어가는 인덱스를 사용하면 오류 발생
혹시 IndexError
라는 에러 메시지를 본 적 있으신가요? 인덱스를 벗어난 접근을 시도할 때 발생하는 오류예요. 그러니 배열의 크기와 각 행의 길이를 반드시 확인하고 사용하는 습관을 들이는 것이 좋습니다.
📋 실습: 인덱스로 배열 값 변경하기
matrix[1][2] = 99
print(matrix)
# 결과:
# [
# [1, 2, 3],
# [4, 5, 99],
# [7, 8, 9]
# ]
간단하지만 강력한 개념입니다. 행과 열을 자유롭게 다루게 되면, 어떤 형태의 데이터도 직관적으로 설계하고 처리할 수 있어요. 다음 단계에서는 반복문을 사용해 2차원 배열을 순회하는 방법을 알아볼게요!
4. 2중 반복문으로 2차원 배열 다루기 🔁
이제 배열 선언과 데이터 접근 방법을 배웠으니, 본격적으로 2차원 배열을 반복문으로 순회하는 방법을 살펴볼 차례예요. 특히 행과 열 각각을 탐색해야 하기 때문에 중첩된 for문을 사용하게 됩니다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for value in row:
print(value, end=' ')
# 출력: 1 2 3 4 5 6 7 8 9
위 코드에서 row
는 각 행 자체를 의미하며, 다시 그 안의 value
를 순회하면서 전체 데이터를 출력하게 됩니다. 이 방식은 가장 기본적이고 직관적인 순회 방식이에요.
🛠 인덱스를 사용한 2중 반복문
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(f"matrix[{i}][{j}] = {matrix[i][j]}")
이 방법은 인덱스를 명시적으로 활용하는 경우에 유용합니다. 배열을 수정하거나 조건문과 함께 사용할 때 특히 유리하죠.
방법 | 특징 |
---|---|
row in matrix | 구조가 간단하고 코드가 짧다 |
index 접근 | 조건문/변경 작업에 적합하다 |
✨ 조건문과 함께 활용하기
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] % 2 == 0:
matrix[i][j] = 0
위 예제처럼 짝수만 0으로 바꾸기
와 같은 조건 처리도 간단하게 할 수 있어요. 반복문을 잘 활용하면 배열을 필터링하거나 가공하는 작업도 자연스럽게 처리할 수 있죠.
- 단순 순회는
for row in matrix
가 편리함 - 위치와 조건 제어에는 인덱스 기반 반복문이 유용함
여기까지 익혔다면 2차원 배열을 자유롭게 탐색할 수 있는 실력을 갖추신 겁니다. 이제 본격적으로 실전 예제, 좌석 배치도 프로그램을 만들어보는 재미있는 시간으로 넘어가 볼까요?
5. 좌석 배치도 예제로 실습하기 🎟️
이제까지 배운 내용을 활용해서 실제로 좌석 배치도를 만들어보는 실습을 해보겠습니다. 가상의 영화관이라고 생각하고, 좌석은 ‘○’로 비어있고, ‘●’로 예약된 상태를 표현하는 식이에요.
📌 예제: 5행 6열 좌석 배치도 만들기
# 5행 6열 좌석을 모두 '○'로 초기화
seats = [['○' for _ in range(6)] for _ in range(5)]
# 좌석 출력 함수
def print_seats():
print(" 1 2 3 4 5 6")
for i, row in enumerate(seats):
print(chr(65 + i), ' '.join(row))
# 예시 예약: B3, C2 좌석 예약
seats[1][2] = '●'
seats[2][1] = '●'
print_seats()
출력 결과는 아래처럼 표시됩니다:
1 2 3 4 5 6
A ○ ○ ○ ○ ○ ○
B ○ ○ ● ○ ○ ○
C ○ ● ○ ○ ○ ○
D ○ ○ ○ ○ ○ ○
E ○ ○ ○ ○ ○ ○
이렇게 간단한 예제만으로도 2차원 배열이 어떻게 활용되는지 한눈에 보이죠. 실제 프로그램에서는 사용자의 입력을 받아 좌석을 선택하거나, 예약 가능 여부를 체크하는 로직도 추가할 수 있어요.
✅ 확장 아이디어: 사용자 예약 인터페이스 만들기
- 사용자가 입력한 좌석(B4, D5 등)을 파싱하여 해당 좌석을 ‘●’로 바꾸기
- 이미 예약된 좌석인지 확인하고 오류 메시지 출력하기
- 좌석 상태를 저장하고 불러오는 기능 구현 (파일 입출력)
2차원 배열을 배우는 목적은 단순한 이론이 아니라, 이렇게 현실 세계의 문제를 코드로 표현하는 데에 있어요. 좌석 배치도는 그 시작점일 뿐, 앞으로 더 복잡한 구조도 얼마든지 다룰 수 있을 거예요. 😊
6. 예제를 통해 정리하는 2차원 배열 활용 팁 💡
2차원 배열을 처음 접하면 어렵게 느껴질 수 있지만, 실습을 통해 한 번 구조를 이해하고 나면 다양한 분야에 활용할 수 있다는 걸 깨닫게 됩니다. 이번에는 우리가 실습한 좌석 배치도 예제를 기반으로, 2차원 배열을 어떻게 더 확장하고 응용할 수 있을지 팁을 정리해볼게요.
✅ 활용 팁 5가지
- 입력 데이터와 시각적 구조 매핑: 사용자의 좌표 입력을 배열 인덱스로 변환하는 방식은 다른 데이터 시각화 작업에서도 자주 활용돼요.
- 다양한 초기화 조건 구성: 리스트 컴프리헨션을 사용하면 특정 규칙을 가진 배열을 쉽게 만들 수 있어요. 예: 삼각형 모양, 대각선 채움 등.
- 조건 기반 반복 처리: 특정 조건을 만족하는 요소만 골라내거나 수정할 때도 유용하죠.
- 행렬 연산 기초: 2차원 배열은 이후 행렬(Matrix) 개념을 배우는 데 있어서 기초가 됩니다. 특히 넘파이(Numpy) 등 라이브러리에서 자주 사용돼요.
- GUI/게임 개발에도 유용: 미로 게임, 틱택토, 퍼즐 같은 2D 게임은 모두 내부적으로 2차원 배열로 구성됩니다.
🚩 여러분만의 연습 문제 만들어보기
- ⭕ 3행 3열 크기의 틱택토 게임판 만들어보기
- ⭕ 특정 열을 기준으로 합계를 구하는 프로그램 작성
- ⭕ 사용자 입력으로 좌석 예약 인터페이스 구현하기
이제 2차원 배열의 개념이 머릿속에 정리되셨나요? 꼭 기억해두세요. 배열은 데이터를 다루는 기본 중의 기본이라는 사실. 프로그래밍이란 결국 데이터를 다루는 기술이니까요.
마무리 🎯
오늘은 2차원 배열이라는 주제를 중심으로 배열의 선언, 접근, 반복 처리 그리고 좌석 배치도 예제까지 단계별로 정리해보았습니다. 특히 현실적인 시나리오를 통해 직접 코드를 작성해보며 실력을 다질 수 있었던 점이 가장 큰 수확이었죠.
2차원 배열은 단지 하나의 구조에 그치지 않고, 추후 게임 개발, 데이터 분석, GUI 설계, 행렬 수학 등 다양한 분야에서 계속해서 응용됩니다. 처음엔 어렵게 느껴질 수 있지만, 익숙해지면 가장 유용한 도구 중 하나가 된답니다.
이 글이 여러분의 파이썬 배열 학습에 도움이 되었기를 바라며, 다음에는 문자열과 배열을 결합한 다양한 실습도 준비해볼게요. 그럼 다음 포스팅에서 또 만나요! 😊