[백준 / BOJ] 2444번 별 찍기 - 7 (Python)◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2024. 3. 12. 12:05
Table of Contents
반응형
🖥️ 시작하며
문제 링크 : 2444번: 별 찍기 - 7 (acmicpc.net)
별을 출력하는 간단한 문제다. 별 찍기 문제는 대부분 수학 문제인 경우가 많다.
이번 문제도 결이 비슷하다. 문제에서 2 x N - 1번째 줄까지 차례대로 별을 출력한다 했고, 예시를 5로 주었다. N이 5라면 9줄이 출력되어야 하고, 1 - 3 - 5 - 7 - 9 - 7 - 5 - 3 - 1개의 별이 출력되어야 한다.
잘 보면, 별이 찍힌 앞의 공백이 4 -> 0 -> 4로 늘었다가 줄어드는 것을 볼 수 있다.
이를 위해 우선 처음에 공백을 색칠해주자.
for i in range(1, N):
for _ in range(N - i):
print(" ", end="")
- 아래 코드를 1부터 5까지 반복한다.
- 공백을 채우는 코드를 5 - i번 반복한다. 여기서 i는 부모 for문에서 받아오므로 1부터 시작하게 되므로, range가 4 ~ 1이 된다.
이제 별을 찍어야 한다. 별은 앞서 말했듯이 1 - 3 - 5 - 7 ... 개를 찍어야 하므로, 간단하게 print문에서 곱해 출력하자.
for i in range(1, N):
for _ in range(N - i):
print(" ", end="")
print("*" * ((i * 2) - 1))
여기까지 코드를 실행시키면 아래와 같은 결과가 나온다.
*
***
*****
*******
앞에 공백이 4, 3, 2, 1개에 별이 1, 3, 5, 7개가 잘 찍혀 있다.
이제 아래를 채우는 것은 위의 별을 채웠으니 쉽게 할 수 있다.
for i in range(N, 0, -1):
for _ in range(N - i):
print(" ", end="")
print("*" * ((i * 2) - 1))
- 위의 별과는 달리 역순으로 해야 하므로 for문에
-1
인자를 준다. N
부터 시작했으니N - i
만큼 공백을 똑같이 찍는다. 여기서는 1부터 4까지 늘어난다. 그러나 맨 처음 반복문에서는 N과 i가 같은 수가 되므로 별만 찍히게 된다.- 별을 찍는 로직은 똑같다.
아래는 코드 전문이다.
import sys
input = sys.stdin.readline
if __name__ == "__main__":
N = int(input())
for i in range(1, N):
for _ in range(N - i):
print(" ", end="")
print("*" * ((i * 2) - 1))
for i in range(N, 0, -1):
for _ in range(N - i):
print(" ", end="")
print("*" * ((i * 2) - 1))
소감
인터넷을 찾아보니 반복문을 한번씩만 쓰고 print문에서 공백을 곱하는 방법도 있었다. 파이썬 다운 방법을 공부해야겠다는 생각이 들었다.
부록
참고문헌
반응형
'◎ 자료구조와 알고리즘 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 / BOJ] 25206번 너의 평점은 (Python) (4) | 2024.03.14 |
---|---|
[백준 / BOJ] 10998번 팰린드롬인지 확인하기 (Python) (0) | 2024.03.13 |
[백준 / BOJ] 25304번 영수증 (C++, Python) (0) | 2022.09.14 |
[백준 / BOJ] 2480번 주사위 세개 (C++, Python) (0) | 2022.09.13 |
[백준 / BOJ] 2525번 오븐 시계 (C++, Python) (0) | 2022.09.13 |
@Reo :: 코드 아카이브
자기계발 블로그