13015번: 별 찍기 - 23
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
www.acmicpc.net
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(2 ≤ N ≤ 100)이 주어진다.
예제
예제 입력1 | 예제 출력1 |
2 | ** ** *** ** ** |
예제 입력2 | 예제 출력2 |
5 | ***** ***** * * * * * * * * * * * * * * * * * * * * * * * * * * * ***** ***** |
코드
n = int(input())
space = 2*n-3
s = '*'+' '*(n-2)+'*'
m = ' '*(n-1) + ('*'+' '*(n-2)+'*' + ' '*(n-2)+'*')
print('*'*n + ' '*(space) + '*'*n) # 최상층
for i in range(1, n-1):
space -= 2
print(' '*i + s + (' '*(space)) + s)
print(m) # 중간층
for i in reversed(range(1, n-1)):
print(' '*i + s + (' '*(space)) + s)
space += 2
print('*'*n+' '*(space)+'*'*n) # 최하층
설명
눈에 보이는 몇 가지 규칙만 적용하면 쉽게 풀 수 있다.
① 왼쪽 공백
왼쪽의 공백은 1씩 늘어난다. 5을 입력했을 때의 결과를 예로 들면 다음과 같다. 오른쪽 공백은 신경쓰지 않는다.
***** *****
1* * * * # 1칸
2 * * * * # 2칸
3 * * * * # 3칸
n-1 * * * # n-1칸
② 최상층과 최하층을 제외한 별 사이의 간격
입력한 수에서 2를 제외한 만큼이 공백이 된다.
** # n = 2, 공백 0칸
* * # n = 3, 공백 1칸
* * # n = 4, 공백 2칸
* * # n = 5, 공백 3칸
# n = n, 공백 n-2칸
변수s에 이 규칙을 넣어 사용하였다.
③ 글자 내부의 빈 공간
이번엔 글자X에서 움푹 파인 부분의 간격을 살펴보고자 한다. 5를 입력했을 때를 보면, 위쪽에서부터 차례로 별 사이의 간격은 7, 5, 3, 1 식인 것을 볼 수 있다.
+4|***** 7 *****
+3| * * 5 * *
+2| * * 3 * *
+1| * *1* *
0| * * *
-1| * *1* *
-2| * * 3 * *
-3| * * 5 * *
-4|***** 7 *****
0에서 층이 하나씩 올라가거나 내려갈 때마다 공백이 2씩 증가하는 것을 볼 수 있다. 층수를 n이라고 했을 때, 꼭대기층의 간격은 2*n-3이며, 한층씩 내려갈 때마다 2씩 빼주고, 반환점인 0층부터 다시 2씩 더해주면 되겠다.
변수 space에 이 규칙을 넣고 사용하였다.
④ 최상층, 최하층, 중간층
이들은 for문에서 제외시켜 따로 입력하였다.
'컴퓨터과학 > Algorithm' 카테고리의 다른 글
[Python] [백준] 2921번 도미노 (0) | 2022.03.04 |
---|---|
[R] [Codewars] 8Kyu - Filter out the geese (0) | 2022.01.07 |
[Python] [백준] 1009번 분산처리 (0) | 2021.12.08 |