© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 3054 - 피터팬 프레임

2025-07-15
BOJ
실버 V
python
원본 문제 보기
구현

문제

BOJ 3054 - 피터팬 프레임

문자열이 주어지면 각 문자를 다이아몬드 모양의 프레임으로 감싸서 출력하라. 프레임은 #으로 그리며, 3번째 문자마다 *로 장식된 특별한 프레임을 사용한다. 인접한 프레임은 모서리를 공유한다.

입력

길이가 1 이상 15 이하인 대문자 알파벳 문자열이 주어진다.

출력

5줄에 걸쳐 프레임으로 감싼 결과를 출력한다.

예제

입력출력
A..#.. .#.#. #.A.# .#.#. ..#..

풀이

5줄짜리 결과 문자열 배열을 구성하며, 각 문자마다 프레임 패턴을 추가한다.

  1. 결과 배열을 5줄로 초기화하고 첫 프레임의 왼쪽 모서리를 설정한다
  2. 각 문자를 순회하며 기본 구분자 #을 사용한다
  3. 3의 배수 번째 문자이면 구분자를 *로 변경하고, 이전 프레임의 공유 모서리도 *로 교체한다
  4. 각 줄에 해당 패턴을 추가한다:
    • 0번 줄: .{s}..
    • 1번 줄: {s}.{s}.
    • 2번 줄: .{문자}.{s}
    • 3번 줄: {s}.{s}.
    • 4번 줄: .{s}..
  5. 완성된 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) — 결과 문자열 저장