10993번: 별 찍기 - 18
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
www.acmicpc.net
n = int(input())
row = 2 ** n - 1
col = 2 * row - 1
canvas = [[' '] * col for i in range(row)]
# 기준은 맨 왼쪽 위를 0,0 으로 잡고 호출
def draw(x, y, n) :
row = 2 ** n - 1 # 현재 그릴 삼각형의 행 갯수
col = 2 * row - 1 # 현재 그릴 삼각형의 열 갯수
if n == 1 :
canvas[x][y] = '*'
return;
if n % 2 : # 홀수일 경우
# 이번 삼각형 그리기
# 각 줄마다 양 끝점 두개 채우기
for i in range(row-1,-1,-1) :
canvas[x + row - i - 1][y + i] = '*'
canvas[x + row - i - 1][y + col - 1 - i] = '*'
# 맨 아랫줄 채우기
if i == 0 :
for j in range(1, col-1) :
canvas[x + row - 1][y + j] = '*'
# 다음 삼각형 호출
draw(x + 2 ** (n-1) - 1, y + 2 ** (n-1), n - 1)
else : # 짝수일 경우 (역삼각형)
# 이번 삼각형 그리기
# 양 끝점들 채우기
for i in range(row) :
canvas[x + i][y + i] = '*'
canvas[x + i][y + col - 1 - i] = '*'
# 맨 윗줄 채우기
if i == 0 :
for j in range(1, col-1) :
canvas[x][y + j] = '*'
# 다음 그릴 삼각형 호출
draw(x + 1, y + 2 ** (n-1), n - 1)
draw(0, 0, n)
for line in canvas :
print(''.join(line).rstrip())
[Try]
1. 맞게 푼 것 같은데 출력 형식이 잘못 되었다고 나왔다.
2. 마지막에 rstrip() 을 통해 오른쪽 공백을 제거해주었더니 맞았다
[Point]
1. trim(), strip()
[More]
'PS > BOJ' 카테고리의 다른 글
[백준] 1966.cpp : 프린터 큐 (0) | 2020.05.20 |
---|---|
[백준] 1874.cpp 스택 수열 (0) | 2020.05.18 |
[백준] 2961.py : 도영이가 만든 맛있는 음식 (0) | 2020.05.17 |
[백준] 1654.cpp : 랜선 자르기 (0) | 2020.05.16 |
[백준] 2448.py : 별 찍기 - 11 (0) | 2020.05.16 |