백준_2448_별 찍기 - 11
문제
2448번: 별 찍기 - 11
첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
www.acmicpc.net
풀이
" "를 "/"를 바꾸어 표현하면 아래와 같으며, 다음과 같은 패턴을 찾을 수 있다.
04: *(01)사이에 5개의 /가 들어가 있다. ****(03)의 길이는 5이다.
05: */*(02)사이에 3개의 /가 들어가 있다. */*(02)의 길이는 3이다.
06: ****(03)사이에 1개의 /가 들어가 있다. *(01)의 길이는 1이다.
07: *(01)사이에 11개의 /가 들어가 있다. *****/*****(06)의 길이는 11이다.
08: */* (02)사이에 9개의 /가 들어가 있다. */*///*/* (05)의 길이는 9이다.
09: ***** (03)사이에 7개의 /가 들어가 있다. */////* (04)의 길이는 7이다.
10: */////* (04)사이에 5개의 /가 들어가 있다. ****(03)의 길이는 5이다.
11: */*///*/* (05)사이에 3개의 /가 들어가 있다. */*(02)의 길이는 3이다.
12: *****/*****(06)사이에 1개의 /가 들어가 있다. *(01)의 길이는 1이다.
13: *(01)사이에 23개의 /가 들어가 있다. *****/*****/*****/*****(12)의 길이는 23이다.
14: */*(02)사이에 21개의 /가 들어가 있다. */*///*/*///*/*///*/*(11)의 길이는 21이다.
15: *****(03)사이에 19개의 /가 들어가 있다. */////*/////*/////*(10)의 길이는 19이다.
16: */////*(04)사이에 17개의 /가 들어가 있다. *****///////*****(09)의 길이는 17이다.
17: */*///*/*(05)사이에 15개의 /가 들어가 있다. */*/////////*/*(08)의 길이는 15이다.
18: *****/*****(06)사이에 13개의 /가 들어가 있다. *///////////*(07)의 길이는 13이다.
19: *///////////*(07)사이에 11개의 /가 들어가 있다. *****/*****(06)의 길이는 11이다.
20: */*/////////*/*(08)사이에 9개의 /가 들어가 있다. */*///*/* (05)의 길이는 9이다.
21: *****///////*****(09)사이에 7개의 /가 들어가 있다. */////* (04)의 길이는 7이다.
22: */////*/////*/////*(10)사이에 5개의 /가 들어가 있다. ****(03)의 길이는 5이다.
23: */*///*/*///*/*///*/*(11)사이에 3개의 /가 들어가 있다. */*(02)의 길이는 3이다.
24: *****/*****/*****/*****(12)사이에 1개의 /가 들어가 있다. *(01)의 길이는 1이다.
01: ///////////////////////*///////////////////////
02: //////////////////////*/*//////////////////////
03: /////////////////////*****/////////////////////
04: ////////////////////*/////*////////////////////
05: ///////////////////*/*///*/*///////////////////
06: //////////////////*****/*****//////////////////
07: /////////////////*///////////*/////////////////
08: ////////////////*/*/////////*/*////////////////
09: ///////////////*****///////*****///////////////
10: //////////////*/////*/////*/////*//////////////
11: /////////////*/*///*/*///*/*///*/*/////////////
12: ////////////*****/*****/*****/*****////////////
13: ///////////*///////////////////////*///////////
14: //////////*/*/////////////////////*/*//////////
15: /////////*****///////////////////*****/////////
16: ////////*/////*/////////////////*/////*////////
17: ///////*/*///*/*///////////////*/*///*/*///////
18: //////*****/*****/////////////*****/*****//////
19: /////*///////////*///////////*///////////*/////
20: ////*/*/////////*/*/////////*/*/////////*/*////
21: ///*****///////*****///////*****///////*****///
22: //*/////*/////*/////*/////*/////*/////*/////*//
23: /*/*///*/*///*/*///*/*///*/*///*/*///*/*///*/*/
24: *****/*****/*****/*****/*****/*****/*****/*****
코드
height = int(input())
width = int((height/3)*5 + (height/3-1))
board = [[" " for i in range(width)] for i in range(height)]
patterns = ["*", "* *", "*****"]
def drawCenter(board, pattern, r) :
edge = (width - len(pattern)) / 2
for j in range(len(pattern)):
try :
board[r][int(edge) + j] = pattern[j]
except :
return 0
# draw init pattern
size = len(patterns)
for i in range(size) :
drawCenter(board, patterns[i], i)
while True:
size = len(patterns)
for i in range(size) :
pattern = "{0:s}{1:s}{0:s}".format(patterns[i], " "*len(patterns[size-i-1]))
patterns.append(pattern)
ans = drawCenter(board, pattern, i+size)
if ans==0 : break
# print board
for i in range(height) :
print("".join(board[i]))