파게로그
[백준 2448번] 별 찍기 - 11 본문
문제 링크: 2448번 별 찍기 - 11
https://www.acmicpc.net/problem/2448
머릿속에서 프랙탈을 그려나가는 것과, 실제로 코드를 이용해서 출력하는 것과의 차이는
아마 쪼갤 때 공백을 어떻게 포함하느냐의 문제가 핵심인 듯하다.
삼각형은 단순히 '가운데 정렬'로 보이지만 앞에 그 만큼의 공백이 앞에 있어야 한다든가...
그런데 여기서 삼각형에 접하는 사각형만큼을 하나의 덩어리로 볼 것인지
또는 그 앞의 공백을 모두 포함하는지부터 생각을 하는 편이 좋다.
결론은, star(n)
이 호출하는 star(prev)
가 return하는 배열이 삼각형에 접하는 사각형만큼만 딱 그려내주고,
그 앞의 공백들은 어차피 점차 길이가 감소하는 반쪽짜리 삼각형이기에 맨 마지막에 삽입해줄 수 있다.
이걸 조금 헤매다가 발견했는데...
결론적으로는, star()과 draw_star()
을 분리한 것이 해답이 된 듯하다.
def star(n):
if n==3:
arr = [['*'],['*', ' ', '*'], ['*', '*', '*', '*', '*']]
return arr
# 1번 삼각형 만들기
arr = star(n//2)
# 2번 삼각형 만들기 (1번에서 복사)
lenArr = len(arr)
for i in range(lenArr):
newArr = []
for j in arr[i]:
newArr.append(j)
arr.append(newArr)
# 빈 삼각형 넣어주기
space = n - 1
for i in range(n//2, n):
for j in range(space):
arr[i].append(' ')
space -= 2
# 3번 삼각형 넣어주기 (1번에서 복사)
copyFrom = 0
for i in range(n//2, n):
for item in arr[copyFrom]:
arr[i].append(item)
copyFrom += 1
return arr
def draw_star(n): # 앞쪽에 여백 넣어주고 배열을 문자열로 출력
starMap = star(n)
space = n - 1
for i in range(len(starMap)):
for j in range(space):
print(' ', end='')
space -= 1
print(''.join(starMap[i]))
n = int(input())
draw_star(n)
'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글
[백준 6603번] 재귀를 통한 조합 구현 (0) | 2020.11.15 |
---|---|
[백준 1991번] 트리 순회 (0) | 2020.11.14 |
[프로그래머스 Lv.2] 124 나라의 숫자 (0) | 2020.11.13 |
[기본 문법] 리스트, 배열 정렬하기 (0) | 2020.11.12 |
[백준 10989번] 수 정렬하기 3 (0) | 2020.11.12 |
Comments