티스토리 뷰

 Python3 

 

 

 

 

전체 코드  :

N = int(input())

for i in range(1, (N+1)):
    if i == 1:				# 첫 번째 줄
        print(' ' * (N - i) + "*")
        
    elif i == N:			# 마지막 줄
        print("*" * (i * 2 - 1))
        
    else:				# 중간
        print(' ' * (N - i) + "*" + ' ' * (i * 2 - 3) + "*")

 

 

별 찍기의 글은 별 찍기(5)로 마무리 하려고 했지만, 별 찍기의 마지막 문제는 마무리 지어야 겠다는 생각이 들었다.

( 별 찍기(5) : >> [Python/Algorithm] - 백준 2442 : 별 찍기(5)

 

백준 2442 : 별 찍기(5)

 Python3 전체 코드  : N = int(input()) for i in range(N): print(' '* (N-i-1) + "*" * ((i+1)*2-1)) 이번에는 뭔가 range(N) 으로 한게 뭔가 코드가 지저분해 보이는 것 같다. N = int(input()) for i in ra..

chae-developer.tistory.com

 

 

일단 input output 예제를 보자면,

#input
3

#output
  *
 * *
*****
#input
5

#output
    *
   * *
  *   *
 *     *
*********
#input
10

#output
         *
        * *
       *   *
      *     *
     *       *
    *         *
   *           *
  *             *
 *               *
*******************

10줄로 별을 찍어보니 약간 크리스마스 트리 같다는 생각이 든다.

어쨌든 규칙은 위 예제들로 알 수 있다.

 

더보기

일단 규칙을 보자면,

1. 맨 마지막줄에 입력된 ( N * 2 - 1 ) 개의 별이 띄어쓰기 없이 쭉 출력된다.

2. 첫 번째 줄에는 N개의 가운데에 별이 찍힌다.

3. 중간에는 각 양쪽으로 트리모양을 이루며 왼쪽 (1개) 오른쪽 (1개) , 총 2개의 별이 찍힌다.

 

 

 

 

수학적인 거라서 딱히 분석할 코드는 없지만, 분석해보겠다.

 

 if i == 1:				
       print(' ' * (N - i) + "*")

for문의 변수 i 가 1일 때 해당하는 코드이다. if문을 사용했다.

N - i 만큼 띄어쓰기를 한 다음, 별을 찍는다.

 

예를 들어, N이 5일 때 N - i ( 5 - 1 ) 인 4 만큼 띄어쓰기를 하고 별 찍기!

#123456789   
     *  
    * *
   *   *
  *     *
 *********

 

elif i == N:		
      print("*" * (i * 2 - 1))

마지막 줄의 별은 띄어쓰기 없이 N * 2 - 1 개가 찍히니까 단순히 별 만 프린트 해주면 된다.

파이썬에서는 else if 를  elif  라고 쓰더라.. 놀랍다.

 

 

else:			
     print(' ' * (N - i) + "*" + ' ' * (i * 2 - 3) + "*")

굳이 따지자면 중간이 가장 생각하기 어렵겠다.

간단하게 보자면, " 띄어쓰기 1 ' + 별 1 + ' 띄어쓰기 ' 2 + 별 2 " 과 같은 형식이다.

 

 

#123456789   
     *  
    * *
   *   *
  *     *
 *********

' 띄어쓰기1 ' 는 첫 번째 줄과 같이 N - i 만큼 띄어쓰기 해주면 된다.

' 띄어쓰기2 ' 는 두 번째 줄일 때는 1번, 세 번째 줄일 때는 3번, 네 번째 줄일 때는 5번 ... 이렇게 홀수로 간다.

 

i 번째 줄일 때 i * 2 - 3 과 같다는 것을 눈치 챌 수 있다!..

그렇게 ' 띄어쓰기2 ' 는 i * 2 - 3 만큼 띄어쓰기를 해주면 된다. 

 

드디어 별 찍기가 끝났다. 야호.

 

 

 

 

 

 

해당 문제 : https://www.acmicpc.net/problem/10992
 

10992번: 별 찍기 - 17

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

 

'Python > Algorithm' 카테고리의 다른 글

백준 2442 : 별 찍기(5)  (0) 2021.01.23
백준 2440,2441 : 별 찍기(3),(4)  (0) 2021.01.23
백준 2439 : 별 찍기(2)  (0) 2021.01.23
백준 2438 : 별 찍기(1)  (0) 2021.01.23
백준 10818 : 최소, 최대  (0) 2021.01.23
댓글