파이썬 2중 반복문으로 별과 하이픈 교차 패턴 만들기

파이썬 2중 반복문으로 별과 하이픈 교차 패턴 만들기

2중 반복문 패턴은 바깥 반복문을 행, 안쪽 반복문을 열로 해석하면 이해하기 쉽습니다. 별과 하이픈이 체스판처럼 교차하는 조건을 좌표로 직접 만들어 보겠습니다.

먼저 3×3 좌표를 생각하기

왼쪽 위를 (0, 0)이라 하면 오른쪽은 (0, 1), 아래쪽은 (1, 0)입니다. 행과 열의 합이 짝수인 칸에는 별, 홀수인 칸에는 하이픈을 놓으면 인접한 칸이 번갈아 바뀝니다.

기본 코드

size = 5

for row in range(size):
    line = ""
    for col in range(size):
        if (row + col) % 2 == 0:
            line += "*"
        else:
            line += "-"
    print(line)
*-*-*
-*-*-
*-*-*
-*-*-
*-*-*

안쪽 반복문이 한 행의 문자열을 완성하고 바깥 반복문이 그 행을 출력합니다.

join으로 행 만들기

문자열에 문자를 계속 더하는 대신 리스트를 만든 뒤 합칠 수도 있습니다.

for row in range(size):
    cells = []
    for col in range(size):
        cells.append("*" if (row + col) % 2 == 0 else "-")
    print("".join(cells))

가로와 세로 크기 따로 받기

rows = 4
cols = 7

for row in range(rows):
    line = "".join(
        "*" if (row + col) % 2 == 0 else "-"
        for col in range(cols)
    )
    print(line)

입력값이 0 이하라면 아무것도 출력되지 않습니다. 사용자 입력을 받는 프로그램이라면 허용 범위를 정하고 너무 큰 값도 제한해야 합니다.

자주 하는 실수

  • line을 바깥 반복문 밖에서 만들면 이전 행의 내용이 계속 누적됩니다.
  • 안쪽 반복문에서 print()를 그대로 호출하면 문자마다 줄이 바뀝니다. 이때는 end=""를 쓰거나 행 문자열을 만듭니다.
  • row % 2만 검사하면 열에 따라 문자가 교차하지 않습니다. 행과 열을 함께 사용해야 합니다.

실행 과정을 좌표로 출력하기

조건이 헷갈릴 때는 문자 대신 좌표와 합을 먼저 출력합니다.

for row in range(2):
    for col in range(3):
        print(row, col, row + col, (row + col) % 2)

마지막 값이 0과 1로 번갈아 바뀌는 것을 확인한 뒤 별과 하이픈으로 치환하면 조건을 추측하지 않아도 됩니다.

연습: 테두리만 별로 그리기

가로 7, 세로 5인 사각형에서 첫 행·마지막 행·첫 열·마지막 열만 *로, 내부는 공백으로 출력해 보십시오. 힌트는 네 조건을 or로 연결하는 것입니다. 1×1과 1×5에서도 정상인지 확인하세요.

반복 횟수 계산으로 성능 이해하기

행이 rows개이고 열이 cols개라면 안쪽 조건은 총 rows * cols번 실행됩니다. 5×7은 35번이지만 10,000×10,000은 1억 번입니다. 콘솔에 거대한 패턴을 출력하면 계산보다 화면 출력이 더 큰 병목이 됩니다.

학습 예제에서는 입력 크기를 1~50처럼 제한하고, 큰 결과가 필요하면 화면에 한 줄씩 출력하기보다 파일에 쓰거나 생성 목적 자체를 다시 검토해야 합니다. 입력 제한도 완성된 프로그램의 일부입니다.

정리

2중 반복문은 좌표를 순회하는 도구입니다. 작은 표에 행과 열 번호를 먼저 적고 조건을 확인한 뒤 코드로 옮기면 복잡한 패턴도 훨씬 쉽게 만들 수 있습니다.