[아이디어]
할 만 하다고 생각했는데.. 계속 이상하게 찍혀서 아래 블로그 참고해서 풀었다
https://zoosso.tistory.com/438
[BOJ] 백준 10997 별 찍기 - 22
출처: 출처: https://www.acmicpc.net/problem/10997 Input 2 Output ***** * * *** * * * * * * * * ***** 가로/세로 길이의 변화 (※ n = 1인 초기값 제외) (가로) 1 → 5 → 9 → 13 → 4(n-1) + 1 = 4n - 3 (세로) 1 → 7 → 11 → 15 →
zoosso.tistory.com
각 시작점에서 아래 과정으로 별을 그려나갑니다.
① 왼쪽으로 width만큼 별 그리기
② 아래쪽으로 height만큼 별 그리기
③ 오른쪽으로 width만큼 별 그리기
④ 위로 height - 2 만큼 별 그리기
⑤ 왼쪽으로 별 1개를 그립니다.
⑥ n > 3일 때는 위의 과정을 수행한 후 다음 단계의 시작점을 매개변수로 넘겨주면 되지만
n = 2일 때는 마무리 단계로 세로 방향으로 별 3개를 연속적으로 그려서 종료합니다.
(※ 입력받은 n = 1인 경우 별 한개만 출력하여 return)
[해결]
'출력 형식이 잘못되었습니다' 오류가 안나려면..
>> * 하나만 찍힌 줄에 나머지 불필요한 공백을 없애주어야 오류가 안난다..!
def print_star(n,new_x,new_y):
global arr
col=4*n-3
row=col+2
for i in range(col): #맨위,아래
arr[new_x][new_y+i]='*'
arr[new_x+row-1][new_y+i]='*'
for i in range(1,row-1): #아래쪽으로 height만큼 찍기
arr[new_x+i][new_y]='*'
for i in range(2,row-1): #위로 height-2만큼 찍기
arr[new_x+i][new_y+col-1]='*'
arr[new_x+2][new_y+col-2]='*' #왼쪽한칸 찍기
if n==2: #중간3개 연속찍기
arr[new_x+2][new_y+2]='*'
arr[new_x+3][new_y+2]='*'
arr[new_x+4][new_y+2]='*'
return
print_star(n-1,new_x+2,new_y+2)
import sys
input = sys.stdin.readline
n=int(input().rstrip())
col=4*n-3
row=col+2
arr=[[' ' for _ in range(col)] for __ in range(row)]
if n==1:
print('*')
else:
print_star(n,0,0)
for i in range(1,col): #출력형식 예외처리, *한개만 남기고 공백 제거
arr[1][i]=''
for i in range(row):
print(''.join(arr[i]))
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 10026번 적록색맹 (1) | 2024.07.12 |
---|---|
[백준] 11724번 연결 요소의 개수 (0) | 2024.07.10 |
[백준] 25501번 재귀의 귀재 (1) | 2024.07.05 |
[백준] 17478번 재귀함수가 뭔가요 (1) | 2024.07.05 |
[백준] 17413번 단어 뒤집기2 (0) | 2024.07.04 |
댓글