본문 바로가기

컴퓨터과학/Algorithm

[Python] [백준] 13015번 별 찍기 - 23

 

 

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문에서 제외시켜 따로 입력하였다.