티스토리 뷰

 

[Python] 백준 알고리즘 온라인 저지 2446번 : 별 찍기 - 9

 

Python3 코드

1) 첫 번째 코드 - zip 함수를 이용

n = int(input())

for bin, star in zip(range(n-1), range(n*2-1 , 1, -2)) :  # zip(공백, 별)
    print(' '*bin + '*'*star)
for bin, star in zip(range(n)[::-1], range(1, n*2, 2)) :  # zip(공백, 별)
    print(' '*bin + '*'*star)

공백과 별의 개수를 각각 range함수로 구하고서 zip함수를 이용해 짝으로 묶었다.  위 코드에서 print문을 수정해서 bin, star 변수의 값을 출력해보면 아래와 같다. 공백과 별의 수를 출력하고 ' / ' 기호로 각 출력 값을 구분해보았다.

>>> n = 5
>>> for bin, star in zip(range(n-1), range(n*2-1 , 1, -2)) :
>>>     print(bin, star, end=' / ')
0 9 / 1 7 / 2 5 / 3 3 /

>>> for bin, star in zip(range(n)[::-1], range(1, n*2, 2)) :
>>>     print(bin, star, end = ' / ')
4 1 / 3 3 / 2 5 / 1 7 / 0 9 / 

 

2) 두번째 코드 - 공백과 별 개수의 규칙을 print 함수에서 산술식으로 나타냈다.

n = int(input())
for i in range(1, n+1)[::-1] :  # 1부터 n까지 역순
    print(' '*(n-i) + '*'*(i*2-1))
for i in range(2, n+1):  # 2부터 n까지
    print(' '*(n-i) + '*'*(i*2-1))

 

 

Python3 코드 풀이

 

1. 작성한 코드에 대한 전체적인 내용 정리

이번 문제는 * 기호를 모래시계 모양으로 찍어내는 문제이다.  숫자 n을 입력받으면 위에서부터 n번째 줄에 * 기호가 하나를 기준으로 한다. 그리고 위아래로 각각 n-1개의 줄만큼 *기호를 그리는데 n번째 줄에 * 기호가 한 개인 것을 기준으로 1,3,5,7,9,... 이런 식으로 개수가 증가하게 된다.

 

이러한 모래시계 모양으로 별을 찍기 위해서 * 기호와 공백의 개수에 규칙을 만들어서 코드를 작성하였다. 위에서 사용한 zip  함수에 대해 설명하면 아래와 같다.

 

2. zip( ) 함수에 대해서

개수가 동일한 자료형을 짝으로 묶어주는 함수이다. 괄호( )안에 리스트, 튜플, 문자 열등 반복 가능한  iterable 자료형을 입력하여 사용할 수 있다. 입력된 자료형의 같은 인덱스끼리 슬라이스 하여 묶어준다. 사용 예시를 보면 아래와 같다.

>>> one = [1, 2, 3]
>>> two = [1, 2, 3]
>>> thr = [1, 2, 3]
>>> zip_list = list(zip(one, two, thr))
>>> print(zip_list)
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]

 

반응형
댓글
반응형