반응형

파이썬 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가지

  1. 입력 데이터와 시각적 구조 매핑: 사용자의 좌표 입력을 배열 인덱스로 변환하는 방식은 다른 데이터 시각화 작업에서도 자주 활용돼요.
  2. 다양한 초기화 조건 구성: 리스트 컴프리헨션을 사용하면 특정 규칙을 가진 배열을 쉽게 만들 수 있어요. 예: 삼각형 모양, 대각선 채움 등.
  3. 조건 기반 반복 처리: 특정 조건을 만족하는 요소만 골라내거나 수정할 때도 유용하죠.
  4. 행렬 연산 기초: 2차원 배열은 이후 행렬(Matrix) 개념을 배우는 데 있어서 기초가 됩니다. 특히 넘파이(Numpy) 등 라이브러리에서 자주 사용돼요.
  5. GUI/게임 개발에도 유용: 미로 게임, 틱택토, 퍼즐 같은 2D 게임은 모두 내부적으로 2차원 배열로 구성됩니다.

🚩 여러분만의 연습 문제 만들어보기

  • ⭕ 3행 3열 크기의 틱택토 게임판 만들어보기
  • ⭕ 특정 열을 기준으로 합계를 구하는 프로그램 작성
  • ⭕ 사용자 입력으로 좌석 예약 인터페이스 구현하기

이제 2차원 배열의 개념이 머릿속에 정리되셨나요? 꼭 기억해두세요. 배열은 데이터를 다루는 기본 중의 기본이라는 사실. 프로그래밍이란 결국 데이터를 다루는 기술이니까요.

마무리 🎯

오늘은 2차원 배열이라는 주제를 중심으로 배열의 선언, 접근, 반복 처리 그리고 좌석 배치도 예제까지 단계별로 정리해보았습니다. 특히 현실적인 시나리오를 통해 직접 코드를 작성해보며 실력을 다질 수 있었던 점이 가장 큰 수확이었죠.

2차원 배열은 단지 하나의 구조에 그치지 않고, 추후 게임 개발, 데이터 분석, GUI 설계, 행렬 수학 등 다양한 분야에서 계속해서 응용됩니다. 처음엔 어렵게 느껴질 수 있지만, 익숙해지면 가장 유용한 도구 중 하나가 된답니다.

이 글이 여러분의 파이썬 배열 학습에 도움이 되었기를 바라며, 다음에는 문자열과 배열을 결합한 다양한 실습도 준비해볼게요. 그럼 다음 포스팅에서 또 만나요! 😊

반응형

+ Recent posts