반응형
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
n = int(input())
k = 0
for i in range(2 * n - 1, 0, -2):
for j in range(k):
print(" ", end = '')
k += 1
for j in range(i , 0, -1):
print("*", end = '')
print("")
k -= 2
for i in range(3, 2 * n, 2):
for j in range(k):
print(" ", end = '')
k -= 1
for j in range(i):
print("*", end = '')
print("")
별 개수를 줄여나가려면 range를 역순으로 만들어야겠다고 생각했다.
그러니 n이나 i로는 공백을 찍기가 곤란해서 k라는 문자를 더 만들었다.
3행에서 k만큼 공백을 출력한다. 첫 줄엔 공백이 없어야 하므로 반복문 바깥에서 k = 0으로 설정했다. k만큼 공백이 출력되면 k를 늘려 다음 줄엔 공백이 한 칸 더 출력되도록 한다.
6행에서 별을 출력한다. 별이 2 * n - 1 개부터 두 개씩 줄어든다. 그래서 2행에서 range함수의 스텝을 -2로 설정했다.
n이 5라면 i는 9부터 시작한다. 별은 첫째 줄에 9개, 둘째 줄에 7개, 셋째 줄에 5개, 넷째 줄에 3개, 다섯째 줄에 1개 출력된다.
n이 5일 때를 계속 예로 들어보자.
2~9행까지의 반복문이 모두 종료되면 마지막 줄에는 공백이 4칸, 별이 하나 출력 된다. 다음 줄에는 공백을 한 칸 줄이고 별을 세 개 출력해야 한다. 그런데 공백을 출력한 후 k가 증가한다. 반복문이 끝난 후 k 값은 5이다. 의미 없이 증가된 k값을 줄어야 하고, 다음 줄을 위해 공백이 하나 줄어야 하므로 10행에서 k에 2를 빼주었다.
이제 별의 개수를 2개씩 늘리면서 똑같이 출력하면 된다.
별 차이는 없지만 k를 사용하지 않아도 실행되게 다듬어 봤다.
n = int(input())
for i in range(n, 0, - 1):
for j in range(n - i):
print(" ", end = '')
for j in range(2 * i - 1):
print("*", end = '')
print()
for i in range(2, n + 1):
for j in range(n - i):
print(" ", end = '')
for j in range(2 * i - 1):
print("*", end = '')
print()
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
(파이썬)프로젝트 오일러(Project Euler)17.1부터 1000까지 영어로 썼을 때 사용된 글자의 개수는? (0) | 2020.07.19 |
---|---|
(파이썬)백준 10996.별 찍기 - 21 (0) | 2020.06.30 |
(파이썬)백준 4673.셀프 넘버 (0) | 2020.06.30 |
(C언어, 파이썬)프로젝트 오일러(Project Euler)16.2^1000의 각 자리수를 모두 더하면? (0) | 2020.06.27 |
(파이썬)프로젝트 오일러(Project Euler)15.20×20 격자의 좌상단에서 우하단으로 가는 경로의 수 (1) | 2020.06.25 |