Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 'WELCOME' 문구가 들어간 디자인 도어매트 패턴 출력하기

두 개의 숫자 nm이 주어졌을 때(m은 n의 배수), 정중앙에 "WELCOME"이라는 단어가 들어간 도어매트 패턴을 출력하는 프로그램을 만들어 보겠습니다. 매트의 크기는 n × m이며, 점(.), 하이픈(-), 파이프(|) 기호와 중앙의 텍스트만을 사용해 패턴을 구성해야 합니다.

예를 들어 입력이 n = 5, m = 15라면 출력 결과는 다음과 같습니다.

------.|.------
---.|..|..|.---
----WELCOME----
---.|..|..|.---
------.|.------

문제 해결 접근 방식

이 문제는 패턴의 대칭성을 활용하면 비교적 간단하게 해결할 수 있습니다. 전체 과정은 다음 세 단계로 구성됩니다.

  1. 위쪽 패턴 출력: i를 1부터 n-1까지 2씩 증가시키면서, 각 줄마다 int((m − i×3) / 2)개의 하이픈, i개의 '.|.', 그리고 다시 int((m − i×3) / 2)개의 하이픈을 출력합니다.
  2. 중앙 텍스트 출력: int((m − 7) / 2)개의 하이픈, 'WELCOME', 그리고 int((m − 7) / 2)개의 하이픈을 출력합니다. 여기서 7은 'WELCOME'의 글자 수입니다.
  3. 아래쪽 패턴 출력: i를 n-2부터 0까지 2씩 감소시키면서 위쪽과 동일한 방식으로 출력하여 상하 대칭을 완성합니다.

파이썬 구현 예제

다음 코드를 통해 실제 구현 방법을 확인해 보겠습니다.

def solve(n, m):
    # 위쪽 패턴 출력
    for i in range(1, n, 2):
        print('-' * int((m - i * 3) / 2) + '.|.' * i + '-' * int((m - i * 3) / 2))

    # 중앙 텍스트 출력
    print('-' * int((m - 7) / 2) + 'WELCOME' + '-' * int((m - 7) / 2))

    # 아래쪽 패턴 출력
    for i in range(n - 2, -1, -2):
        print('-' * int((m - i * 3) / 2) + '.|.' * i + '-' * int((m - i * 3) / 2))

n = 15
m = 45
solve(n, m)

입력

15, 45

출력

---------------------.|.---------------------
------------------.|..|..|.------------------
---------------.|..|..|..|..|.---------------
------------.|..|..|..|..|..|..|.------------
---------.|..|..|..|..|..|..|..|..|.---------
------.|..|..|..|..|..|..|..|..|..|..|.------
---.|..|..|..|..|..|..|..|..|..|..|..|..|.---
-------------------WELCOME-------------------
---.|..|..|..|..|..|..|..|..|..|..|..|..|.---
------.|..|..|..|..|..|..|..|..|..|..|.------
---------.|..|..|..|..|..|..|..|..|.---------
------------.|..|..|..|..|..|..|.------------
---------------.|..|..|..|..|.---------------
------------------.|..|..|.------------------
---------------------.|.---------------------

코드 핵심 포인트

이 코드의 핵심은 파이썬의 문자열 곱셈입니다. '-' * 10처럼 문자열에 정수를 곱하면 해당 문자가 지정한 횟수만큼 반복된 문자열을 얻을 수 있습니다. 이를 활용해 각 줄에 필요한 하이픈과 '.|.' 패턴의 개수를 계산한 뒤 이어 붙이면 원하는 모양을 쉽게 만들 수 있습니다.

또한 range(1, n, 2)는 1부터 시작하는 홀수만 순회하고, range(n - 2, -1, -2)는 큰 홀수부터 역순으로 순회합니다. 두 반복문을 조합하면 중앙을 기준으로 좌우·상하가 모두 대칭인 마름모 형태의 패턴을 자연스럽게 완성할 수 있습니다.