직접 풀어보시고 아래의 글을 읽어주세요.
글쓴이보다 더 좋은 풀이와 코드가 있을 수 있습니다.
n = 1 일땐 별이 하나만 찍히고,
n 값이 늘어갈때마다 일정한 규칙을 따라 값이 증가하고 있다.
다음과 같은 식으로 접근할 수 있다.
(nx2)-1
(1x2) -1 = 1
(2x2) -1 = 3
(3x2) -1 = 5
(4x2) -1 = 7
다음과 같은 코드를 작성하면
n=4
for i in range((n*2)-1) : 별 출력 !!
n을 4로 가정하고, 반복자 i의 값이 0부터 시작해서 6까지, 총 7회 반복한다.
노란색 글씨로 쓰여진 순서대로, 위에서 아래로
반복자 i의 값이 증가하게 된다.
반복자 i의 값에 따라 다음과 같은 규칙을 알 수 있다.
왼쪽,오른쪽 벽에 그려진 별과 공백을 포함하지 않고서 규칙성을 찾았는데,
이것은 잠시 뒤로 밀어두고, 박스안에 별과 공백이 있는지만 확인해보자.
반복자 i의 값을 토대로
i%2 로 계산하여 홀수, 짝수를 판단하여
i%2 = 0 이라면 별을 출력하고
i%2 = 1 이라면 공백을 출력한다.
두 그림을 합치면, 이러한 역 피라미드꼴로 점점 좁아지고 있는것을 확인할 수 있다.
가장 처음 높이를 구한 (nx2)-1의 식을 다시 떠올려보자
def print_star(x,y):
ㅡ 이 라인에 왼쪽 벽을 그리는 어떠한 코드가 있다고 가정합니다. ㅡ
#아래는 중앙 별과, 공백을 출력하는 코드입니다.
for i in range(y+y-1):
pirnt("*" if x%2==0 else " ")
ㅡ 이 라인에 오른쪽 벽을 그리는 어떠한 코드가 있다고 가정합니다. ㅡ
n=4
for i in range((n*2)-1) : print_star(n-i,i)
다음의 코드에서 매개변수로 전달되는 값은 다음과 같습니다.
x | y | y+y-1 | x%2 |
---|---|---|---|
0 | 7 | 13 | 0 |
1 | 6 | 11 | 1 |
2 | 5 | 9 | 0 |
3 | 4 | 7 | 1 |
4 | 3 | 5 | 0 |
5 | 2 | 3 | 1 |
6 | 1 | 1 | 0 |
def print_star(x,y):
star = 0
for i in range(x):
star = 1 - star
pirnt("*" if star else " ",end='')
for i in range(x):
star = 1 - star
print(" " if star else "*",end=' ')
x = n-i
x = 0
실행 없음
x = 1
첫 번째 for문
i = 0 : star = 1 - 0 , 출력 : *
두 번째 for문
i = 0 : star = 1-1 , 출력 : *
star 값을 이용하여 삼항 연산자를 사용하지만
위의 for문과 아래 for문의 차이점은,
참일때 별을 출력하고, 거짓일때 공백을 출력하고 있다.
def print_star(x,y):
s = ""
star = 0
for i in range(x):
star = 1 - star
s += "*" if star else " "
for i in range(y+y-1):
s += "*" if x%2==0 else " "
for i in range(x):
star = 1 - star
s += " " if star else "*"
s += "\n"
return s
n = int(input())
n = (n*2)-1
result = ""
for i in range(n,0,-1): result += print_star(n-i,i)
for i in range(2,n+1,1): result += print_star(n-i,i)
print(result)
print 함수를 자주 사용하게 된다면 코드의 효율성이 떨어지기에
문자열에 담아두고, 마지막 결괏값을 출력하는 코드를 작성했다.
하단부의 for문 i 반복자의 초기값이 2로 설정하여,
하단부는 세로 중앙열 에서 시작하는것이 아닌
세로 중앙열 한칸 밑에서부터 출력값을 잡는다.