Python/Algorithm

[Python_Algorithm]반복 과정에서 조건 판단하기 3(자료구조와 함께 배우는 알고리즘 입문)

bangle0621 2021. 1. 9. 11:43

*를 n개 출력하고 w마다 줄바꿈하는 두가지의 방법이 있다.

 

방법1.

# *를 n개 출력하되 w개마다 줄바꿈하기1

print('*를 출력합니다.')
n = int(input('몇개를 출력할까요?'))
w = int(input('몇개마다 줄바꿈할까요?'))

for i in range(n):
    print('*',end='')
    if i % w == w -1:
        print()
        
if n % w:     
    print()

방법1은 for 문안에 if가 들어가 있기에 for 문이 실행될 때마다 if문도 실행되게 된다

 

i는 0부터 시작하기에 i%W(나머지) 가 w-1과 같을때 줄바꿈을 하게 된다.

마지막 단락의 if 문은 n이 w의 배수가 아닌 수일때 나머지 부분의 계산을 하여 줄바꿈을 한다.

:0을 제외한 숫자는 true 니까 맨 밑에 부분이 0이 아닌이상 개행이 이뤄진다.(배수가 아닌이상)

 

위의 for문에서 

일단 n번만큼 for문이 실행되기에 효율적이지 못하다.

 

방법2.

# *를 n개 출력하되 w개마다 줄바꿈하기2

print('*를 출력합니다')
n=int(input('몇 개를 출력할까요?:'))
w=int(input('몇 개마다 줄바꿈할까요?:'))

for _ in range(n//w):   #n//w 번 반복
    print('*'*w)
    
rest = n%w
if rest:
    print('*'*rest)

방법2는 for문의 반복 횟수부터 차이가 난다. 

n//w 몫만큼 반복하도록 하였고 반복문 안에 줄에 나오는 *가 모두 출력되어지기 때문에 반복 횟수가 훨씬 줄어든다.

 

배수가 아닌 경우의 나머지는 rest에서 해결해준다. 

rest 라는 변수 안에 n%w  나머지 부분을 넣고 

rest가 0이 아닌(배수가 아닌 경우)에 나머지 부분의 수만큼(rest를 곱해주니까) *가 출력되어진다.