[Python] 백준/BOJ 3054번: 피터팬 프레임 (Silver 5)

2025. 7. 13. 07:19·Algorithm/백준 (BOJ)
반응형

💻 Problem

문제 보러 가기

 

"피터팬 프레임"은 단어를 다이아몬드 형태로 장식하는 것이다.

알파벳 X를 피터팬 프레임으로 장식하면 다음과 같다.

..#..
.#.#.
#.X.#
.#.#.
..#..

"웬디 프레임"은 피터팬 프레임과 유사하지만, 다이아몬드를 '*'로 만드는 것이다. 

알파벳 X를 웬디 프레임으로 장식하면 다음과 같다.

..*..
.*.*.
*.X.*
.*.*.
..*..

단어가 주어졌을 때, 3의 배수 위치(세 번째, 여섯 번째, 아홉 번째, ...)에 있는 알파벳은 웬디 프레임으로, 나머지 알파벳은 피터팬 프레임으로 장식하는 프로그램을 작성하시오.

웬디 프레임과 피터팬 프레임이 겹칠 경우에는, 웬디 프레임이 위에 있다.

 

첫째 줄에 알파벳 대문자로 이루어진 최대 15글자 단어가 주어진다.

 

💡 Approach

입력의 길이가 최대 15이므로 배열의 크기는 세로 5, 가로 61이므로 구현 시간은 매우 여유롭다.

그냥 문자열을 직접 더해줘도 되지만 2차원 배열에 반복문으로 접근하는 방식으로 구현해보고 싶어서 오래 고민해 봤다.

 

decorate 함수 안에서 row, col을 지정할 때 자꾸 숫자나 범위가 헷갈려서 머리 아팠다..

 

문제에서 배열의 높이가 5이므로 가운데 행은 2번째 행이 된다.

  • 2번째 행을 기준으로 2번째 행은 (2 - 2)번째 열, (2 + 2)번째 열에 장식
  • 바로 위아래 행인 1번째 행, 3번째 행은 (2 - 1)번째 열, (2 + 1)번째 열에 장식
  • 하나 더 위 아래 행인 0번째 행, 4번째 행은 (2 - 0)번째 열에 장식

피터팬 프레임('#')보다 웬디 프레임('*')이 우선이므로 특정 칸에 이미 웬디 프레임으로 장식되어 있다면 장식을 갱신하지 않았다.

 

✏️ Solution

import sys
input = sys.stdin.readline

def decorate(s, pattern):
    for i in range(-mid, mid + 1):
        if board[mid + i][s + abs(i)] != '*':
            board[mid + i][s + abs(i)] = pattern
        board[mid + i][s + N - 1 - abs(i)] = pattern

word = input().rstrip()
N = 5
mid = N // 2
board = [['.'] * (N + (N - 1) * (len(word) - 1)) for _ in range(N)]

for i in range(len(word)):
    decorate(i * (N - 1), '*' if (i + 1) % 3 == 0 else '#')

for i in range(len(word)):
    board[mid][i * (N - 1) + mid] = word[i]

for row in board:
    print(*row, sep='')

 

반응형

'Algorithm > 백준 (BOJ)' 카테고리의 다른 글

[Python] 백준/BOJ 26042번: 식당 입구 대기 줄 (Silver 5)  (0) 2025.07.15
[Python] 백준/BOJ 3459번: 아스키 도형 (Silver 1)  (0) 2025.07.14
[Python] 백준/BOJ 22869번: 징검다리 건너기 (small) (Silver 1)  (0) 2025.07.12
[Python] 백준/BOJ 14929번: 귀찮아 (SIB) (Silver 4)  (0) 2025.07.11
'Algorithm/백준 (BOJ)' 카테고리의 다른 글
  • [Python] 백준/BOJ 26042번: 식당 입구 대기 줄 (Silver 5)
  • [Python] 백준/BOJ 3459번: 아스키 도형 (Silver 1)
  • [Python] 백준/BOJ 22869번: 징검다리 건너기 (small) (Silver 1)
  • [Python] 백준/BOJ 14929번: 귀찮아 (SIB) (Silver 4)
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (196) N
      • SSAFY (10)
      • Algorithm (114) N
        • 이론 (6)
        • 백준 (BOJ) (107) N
        • 프로그래머스 (1)
      • Trouble Shooting (9)
      • Frontend (6)
      • React (17)
      • Next.js (4)
      • Vue (4)
      • Node.js (2)
      • HTML (9)
      • DevOps (4)
        • Git (4)
      • Language (9)
        • JavaScript (0)
        • Java (9)
      • Embedded (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
      • 자격증 (2)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Error
    우선순위큐
    힙
    구현
    백준
    Java
    오블완
    Algorithm
    브루트포스
    SSAFY
    SSAFYcial
    중복조합
    티스토리챌린지
    DP
    bfs
    블록체인
    백트래킹
    순열
    강의
    dfs
    중복순열
    html5
    Heap
    React
    파이썬
    수학
    싸피
    알고리즘
    재귀
    Next.js
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[Python] 백준/BOJ 3054번: 피터팬 프레임 (Silver 5)
상단으로

티스토리툴바