https://www.acmicpc.net/problem/3054
"피터팬 프레임"은 단어를 다이아몬드 형태로 장식하는 것이다.
알파벳 X를 피터팬 프레임으로 장식하면 다음과 같다.
..#..
.#.#.
#.X.#
.#.#.
..#..
"웬디 프레임"은 피터팬 프레임과 유사하지만, 다이아몬드를 *로 만드는 것이다.
알파벳 X를 웬디 프레임으로 장식하면 다음과 같다.
..*..
.*.*.
*.X.*
.*.*.
..*..
구현은 생각보다 빨리 했는데, 웬디 프레임 출력할 때 상당히 애 좀 먹었습니다..
프레임은 항상 5줄로 이루어져있기 때문에 이를 이용해서 풀어보겠습니다.
빈 문자열 5개를 저장한 리스트를 선언해 여기다 그림을 그려볼게요.
enumerate()를 이용해 인덱스와 값을 모두 가져와 보겠습니다.
frame = [''] * 5
for i,c in enumerate(s):
예시를 보면 알겠지만 패턴이 항상 일정하기 때문에 이를 먼저 그려보겠습니다.
val = '#'
if (i+1) % 3 == 0: # 3의 배수일 경우
val = '*'
pattern = [
f'..{val}..',
f'.{val}.{val}.',
f'{val}.{c}.{val}',
f'.{val}.{val}.',
f'..{val}..'
]
생각보다 단순하죠?
이제 이 값들을 배열에 추가해주면 됩니다.
for idx in range(5):
if i == 0: # 첫 번째 그림일 경우
frame[idx] = pattern[idx] # 값을 그대로 추가
else: # 1 이상일 경우
frame[idx] += pattern[idx][1:] # 첫 번째 값을 제외하고 추가
이렇게 해주면 끝 ‼️
인줄 알았으나 ,, 이 상태로 한 번 예제 abcd를 입력해보겠습니다.

c의 옆 부분을 보시면 *이 출력이 돼야 하는데, #이 나오는 것을 확인하실 수 있습니다.
이를 어떻게 해결할지 상당히 고민을 많이 했는데, 구글링하다가 다른 분의 코드를 보고 참고해서 해결했습니다..
인덱스가 3의 배수일 경우 val 값만 수정한 것이 아니라 바로 3번째 줄을 수정해주었습니다.
마지막 값을 삭제하고 그 뒤에 *을 추가해 이를 해결했습니다. 🥳
if (i+1) % 3 == 0:
val = '*'
frame[2] = frame[2][:-1]+val
실버라고 만만히 봤다가 큰 코 다친 문제 ,,
s = input()
frame = [''] * 5
for i,c in enumerate(s):
val = '#'
if (i+1) % 3 == 0:
val = '*'
frame[2] = frame[2][:-1]+val
pattern = [
f'..{val}..',
f'.{val}.{val}.',
f'{val}.{c}.{val}',
f'.{val}.{val}.',
f'..{val}..'
]
for idx in range(5):
if i == 0:
frame[idx] += pattern[idx]
else:
frame[idx] += pattern[idx][1:]
for row in frame:
print(row)