문제
문자열이 주어지면 각 문자를 다이아몬드 모양의 프레임으로 감싸서 출력하라. 프레임은 #으로 그리며, 3번째 문자마다 *로 장식된 특별한 프레임을 사용한다. 인접한 프레임은 모서리를 공유한다.
입력
길이가 1 이상 15 이하인 대문자 알파벳 문자열이 주어진다.
출력
5줄에 걸쳐 프레임으로 감싼 결과를 출력한다.
예제
| 입력 | 출력 |
|---|---|
A | ..#.. .#.#. #.A.# .#.#. ..#.. |
풀이
5줄짜리 결과 문자열 배열을 구성하며, 각 문자마다 프레임 패턴을 추가한다.
- 결과 배열을 5줄로 초기화하고 첫 프레임의 왼쪽 모서리를 설정한다
- 각 문자를 순회하며 기본 구분자
#을 사용한다 - 3의 배수 번째 문자이면 구분자를
*로 변경하고, 이전 프레임의 공유 모서리도*로 교체한다 - 각 줄에 해당 패턴을 추가한다:
- 0번 줄:
.{s}.. - 1번 줄:
{s}.{s}. - 2번 줄:
.{문자}.{s} - 3번 줄:
{s}.{s}. - 4번 줄:
.{s}..
- 0번 줄:
- 완성된 5줄을 출력한다
핵심 아이디어: 다이아몬드 프레임의 각 줄을 패턴으로 분리하고, 3번째마다 구분자를 *로 바꾸면 규칙적으로 생성할 수 있다.
코드
w = input()
result = [".", ".", "#", ".", "."]
for n, i in enumerate(w, 1):
s = "#"
if n % 3 == 0:
s = "*"
result[2] = result[2][:-1] + s
result[0] += f".{s}.."
result[1] += f"{s}.{s}."
result[2] += f".{i}.{s}"
result[3] += f"{s}.{s}."
result[4] += f".{s}.."
for i in result:
print(i)복잡도
- 시간: O(N) — 문자열 길이만큼 순회
- 공간: O(N) — 결과 문자열 저장