[백준 2446번] 별 찍기 -9 -python

2023. 1. 29. 19:13code/[백준] python

2446번

https://www.acmicpc.net/problem/2446

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

🐰 나의 코드

n=int(input())

for i in range(n,0,-1):
    print((n-i)*" "+(2*i-1)*"*")
    
for j in range(2,n+1):
    print((n-j)*" "+(2*j-1)*"*")

문제의 출력 2xN-1번째에서 힌트를 얻었다.

처음에는 center을 이용해서 문제를 해결하려 했는데, 출력의 형태가 잘못됐다 그래서 애 좀 먹었다.

어쨌든 이 코드는, 입력받는 숫자를 n에다 저장한 후 두 번의 for문을 통해 출력이 된다.

먼저 첫번째 for문에서는 n에서 1까지 내림차순으로 숫자가 내려가도록 했다.

for문에서 나오는 숫자 i는 처음 입력받은 n에서 i를 뺀 만큼을 공백을 가지도록 출력한 후, 그 뒤에 바로 2*i-1개의 별이 출력되도록 했다.

마찬가지로 다음에 오는 for문에서는 오름차순으로 숫자가 올라가게끔 하고, 출력 방식은 첫번째 for문의 print문과 유사하게 작성했다.

👑 다른 사람의 코드

N=int(input())
for i in range(1,2*N):
	print(' '*(min(i,2*N-i)-1)+'*'*(1+2*(N-min(2*N-i,i))))

2N과 min을 활용하여 for문 하나로 출력하도록 했다.

이렇게도 풀 수 있군...