백준기초에서 새로운 스타일의 예제를 풀어서 블로깅해보려고 한다.
별찍기 기본 문제는 해보았지만 모양이 변형된 문제는 안해봤기 때문에 생각을 좀 해야 했다.
# 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)
# 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))
이렇게 풀면 오른쪽 공백값 없이 정답이 된다.
# 입력 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))