TIL#31 PYTHON 예제연습(4)

dnpxm387·2020년 8월 11일
0

python

목록 보기
27/43
post-thumbnail

~~백준기초~~에서 새로운 스타일의 예제를 풀어서 블로깅해보려고 한다.
별찍기 기본 문제는 해보았지만 모양이 변형된 문제는 안해봤기 때문에 생각을 좀 해야 했다.

별찍기 응용1

# 5를 입력했다 했을 때 출력되는 값을 보고 n을 입력했을때의 소스코드 유추하기
*
**
***
****
*****
****
***
**
*
import sys
n = int(sys.stdin.readline())

for i in range(1, n + 1):  # 1부터 n까지 '*'출력
    print('*' * i)
for j in range(n - 1, 0, -1): # n-1 부터 1까지 '*'출력
    print('*' * j)

별찍기 응용2

# 5를 입력했을 때 출력값을 보고 n을 입력할때 소스코드 유추하기
*********
 ******* 
  *****  
   ***   
    *    
   ***   
  *****  
 ******* 
*********
# 내가 푼 방법
import sys
n = int(sys.stdin.readline())

for i in range(2 * n - 1, 0, -2):
    print(('*' * i).center(2*n-1))
for j in range(3, 2 * n, 2):
    print(('*' * j).center(2*n-1))

답은 같게 나온다. 그런데 정답이 틀렸다고 나왔다. 출력형식이 잘못되었다며.. 구글링을 통해 알아보니, 공백값이 잘못되면 그렇게 나온다 한다. .center() 를 이용해 오른쪽에 공백값이 들어가서 잘못되었다 나오는 것 같다. 그래서 정답인 소스코드로 다시 풀었다.

import sys
n = int(sys.stdin.readline())
a = n
for i in range(1, n + 1):
    print(' ' * (i - 1) + '*' * (2 * (a - i) + 1))
for j in range(1, b):
    print(' ' * (a - j - 1) + '*' * (2 * j + 1))

이렇게 풀면 오른쪽 공백값 없이 정답이 된다.

별찍기 응용3

# 입력 1
*
# 입력 2
*
 *
*
 *
# 입력 3
* *
 *
* *
 *
* *
 *
# 입력 4
* *
 * *
* *
 * *
* *
 * *
* *
 * *

한번에 맞췄다! 구글링으로 다른 분들의 답을 찾아봤지만 이번엔 다들 각자의 방식으로 풀었더라.

# 내가 쓴 정답
import sys
n = int(sys.stdin.readline())

for i in range(n):
    if n == 1:
        print('*')
        break
    if n % 2 == 1:
        print(('* ' * (n // 2 + 1)))
        print(' *' * (n // 2))
    else:
        print('* ' * (n // 2))
        print(' *' * (n // 2))
profile
개발자꿈나무🌲

0개의 댓글