백준 별 찍기 코드 및 해설 (파이썬)
2021. 9. 29. 10:35ㆍalgorithm
반응형
https://www.acmicpc.net/problem/2447
로그 함수 때문에 애 먹었다
왜 그러는거야?
왜 log_3(81)은 4.0이고 log_3(243)은 4.99 라서 날 힘들게 만든거야!
int가 아니라 round를 써야 했다
재귀함수를 사용했다.
[이전 모양 사각형] [이전 모양 사각형] [이전 모양 사각형]
[이전 모양 사각형] [ N/3 빈 정사각형] [이전 모양 사각형]
[이전 모양 사각형] [이전 모양 사각형] [이전 모양 사각형]
이런 모양이면 된다.
프린트를 어떻게 하는지 고민했는데
일단 리스트로 만들고 나서 프린트했다.
리스트의 각 row를 원하는 만큼 반복해주고 다 완성된 다음 한 줄씩 프린트 하는 방식으로~
import sys
import math
def stars(k):
if k == 1:
return ['***','* *', '***']
else:
result = []
prev_stars = stars(k-1)
# 이전 모양 3개 위에 쌓기
for row in prev_stars:
result.append(row * 3)
# 이전 모양 + (N/3 * N/3) 크기의 빈 사각형 + 이전 모양
for row in prev_stars:
result.append(row + ' ' * int(3**(k-1)) + row)
# 이전 모양 3개 아래에 쌓기
for row in prev_stars:
result.append(row * 3)
return result
N = int(sys.stdin.readline())
# N = 81일 때 4.0, N = 243일 때 4.999 라서 int 아니고 round 해줘야 함
k = round(math.log(N, 3))
for s in stars(k):
print(s)
반응형
'algorithm' 카테고리의 다른 글
백준 토마토 코드 및 해설 (파이썬) (0) | 2021.10.04 |
---|---|
백준 설탕 배달 코드 및 해설 (파이썬) (0) | 2021.10.04 |
백준 최종 순위 코드 및 해설 (파이썬) (0) | 2021.09.29 |
백준 인구 이동 코드 및 해설 (파이썬) (0) | 2021.09.22 |
백준 감시 피하기 코드 및 해설 (파이썬) (0) | 2021.09.22 |