[백준/파이썬] 10993번 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 10993번 문제
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력 요약
첫째 줄에 N(1 ≤ N ≤ 10)이 주어진다.
출력 요약
첫째 줄부터 차례대로 별을 출력한다.
코드
n = int(input())
#1-1
#2-3, 5
#3-7, 13
#4-15, 29
#5-31, 61
#n-2**n-1, 2**(n+1)-3
shapes = []
for idx in range(1, n+1):
tri = [[' ']*(2**(idx+1)-3) for _ in range(2**idx-1)]
if idx % 2 != 0:
for i in range(2**idx-2):
tri[i][2**idx-2-i]='*'
tri[i][2**idx-2+i]='*'
tri[2**idx-2]=['*']*(2**(idx+1)-3)
for i in range(2**(idx-1)-1, 2**idx-2):
for j in range(2**(idx-1), 3*(2**(idx-1))-3):
tri[i][j] = shapes[-1][i-(2**(idx-1)-1)][j-(2**(idx-1))]
else:
tri[0]=['*']*(2**(idx+1)-3)
for i in range(1, 2**idx-1):
tri[i][i]='*'
tri[i][2**(idx+1)-4-i]='*'
for i in range(1, 2**(idx-1)):
for j in range(2**(idx-1), 3*(2**(idx-1))-3):
tri[i][j] = shapes[-1][i-1][j-(2**(idx-1))]
shapes.append(tri)
r = ''
for row in shapes[-1]:
for i in range(len(row)-1, -1, -1):
if row[i] == '*':
tmp = row[0:i+1]
break
r += "".join(map(str, tmp))+"\n"
print(r)
설명
핵심은 구현 관점에서 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.를 만족하도록 로직을 구성하는 것입니다.
코드는 입력을 파싱한 뒤 조건 분기와 계산을 순서대로 수행하고, 문제에서 요구한 형식으로 결과를 출력합니다.
경계값과 예외 케이스도 함께 고려해 오답이 나기 쉬운 상황을 방지합니다.
댓글남기기