문제
https://www.acmicpc.net/problem/10992
<입출력>
- 출력 종류가 1층/ n층/ 나머지층 크게 3분류로 나뉨
코드
n = int(input())
for i in range(1, n+1):
if i == 1:
print(" "*(n-i)+"*")
elif i == n:
print("*"*(2*i-1))
else:
print(" "*(n-i)+"*"+" "*(2*(i-2)+1)+"*")
풀이
출력 시 특이점이 있는 부분인 1층, n층에서의 출력문을 if- elif - else를 이용해 나눠줬다.
n층을 제외한 나머지 층 i에서, 공백부분이 n-i만큼 먼저 나온 후, 양 끝에 *이 출력되고 그 사이는 다시 공백으로 채워진다.
가운데 공백은, 원래 2*i-1의 공간에서 양쪽 *을 제외하므로, 2*i-1-2즉, 2*i-3만큼 공백이 필요하다.
따라서 n-i개 만큼 공백을 출력 후 → * 1개 출력 → 2*i-3만큼 공백 출력 → * 1개 출력 이런 방식으로 진행된다.
다른 풀이
출처: https://www.acmicpc.net/source/16602274
N = int(input())
if N == 1:
print('*')
else:
print(' ' * (N - 1) + '*')
for i in range(N - 2):
print(' ' * (N - i - 2) + '*' + ' ' * (2 * i + 1) + '*')
print('*' * (2 * N - 1))
→ 어차피 1층과 n층은 무조건 출력되므로 아예 for문 밖으로 빼서 처리했다. (그러기 위해 N==1인 경우를 if문으로 나눠주었다.)
→ 따라서 range도 자연스럽게 N-2가 되고, i대신 i-2가 들어가므로 n-i ==> n-i-2, 2*i-3 ==> 2*i+1로 변경한다.
'Algorithm > Beakjoon' 카테고리의 다른 글
[Python] 백준 11726번_2xn 타일링 (0) | 2022.08.10 |
---|---|
[Python] 백준 1463번_1로 만들기 (0) | 2022.08.09 |
[Python] 백준 2446번_별 찍기 - 9 (0) | 2022.08.05 |
[Python] 백준 8393번_합 (0) | 2022.08.03 |
[Python] 백준 1924번_2007년 (0) | 2022.08.02 |