문제
https://www.acmicpc.net/problem/2446
코드
cnt = int(input())
#1번째~ 5번째 줄
for i in range(1,cnt+1):
print(' '*(i-1)+'*'*(2*(cnt-i)+1))
#6번째~ 9번째 줄(1줄 적게)
for j in range(2,cnt+1):
print(' '*(cnt-j)+'*'*(2*j-1))
풀이
무식하게 푼 감이 없지않아 있다... 그냥 직관적으로 *이 줄어드는 첫 번째 for문 과 다시 *이 증가하는 두번째 for문을 이어붙였다.
다른 풀이
출처: https://www.acmicpc.net/source/18527657
num = int(input())
for n in range(-num+1,num):
print(' '*(num-abs(n)-1) + '*'*(2*abs(n)+1))
→ 규칙을 발견해서 활용했다.
- * 1개를 중심으로 대칭을 이루는 구조이므로, range의 범위도 -num+1 ~ num-1까지로 적용했다.
- 즉, num이 5이면 -4 ~ 4까지 총 9줄에 걸쳐 출력된다는 것
- 1-9번째 라인이 대칭을 이룸 → ' 'x0 + '*'x9개 조합. 이때 -4, 4이므로 abs()를 이용해 같은 값처럼 사용했다.
- 5번째 라인은 ' 'x4 + '*'x1 조합. 이때 n=0이므로 알맞게 출력된다
- 대칭 구조일 경우 abs를 이용하는 편이 좋을 것 같다.
'Algorithm > Beakjoon' 카테고리의 다른 글
[Python] 백준 1463번_1로 만들기 (0) | 2022.08.09 |
---|---|
[Python] 백준 10992번_별 찍기-17 (0) | 2022.08.08 |
[Python] 백준 8393번_합 (0) | 2022.08.03 |
[Python] 백준 1924번_2007년 (0) | 2022.08.02 |
[Python] 백준 11720번_숫자의 합 (0) | 2022.08.01 |