🌈 알고리즘 기초 - 반복하는 알고리즘
🔥 별을 n개 출력하되, w개 마다 줄바꿈하기
🔥 10~99 사이의 난수 n개 생성하기
🔥 넓이가 area인 사각형의 변의 길이 나열하기
🔥 별로 왼쪽 아래가 직각인 이등변 삼각형 출력하기
🔥 별로 오른쪽 아래가 직각인 이등변 삼각형 출력하기
1. 별을 n개 출력하되, w개 마다 줄바꿈하기
- n=10, w=3 이라면, 아래 if문을 통해 i값을 3으로 나눈 값의 나머지가 2일 때마다 줄바꿈 발생
- i는 n이 10이기 때문에 0부터~9까지 반복되기 때문에 i값이 2, 5, 8일 때 if문이 작동함
- i값이 2,5,8인데 *(별)이 3개씩 찍히는 것은 i값이 0부터 시작하기 때문에 실제로는 3번째, 6번째, 9번째에 if문(줄바꿈)이 일어나기 때문임
print('*을 출력합니다.')
n = int(input('총 몇 개를 출력할까요?'))
w = int(input('몇 개마다 줄바꿈할까요?'))
for i in range(n):
print('*', end='')
if i % w == w - 1:
print()
if n % w:
print()
- 위 코드는 반복문이 실행될 때마다 if문이 실행되서 if문이 참인지 거짓인지 판단해야하기 때문에 비효율적임
- 아래 코드가 보다 효율적인 코드임
- n이 10이고, w가 3이라면, 10를 3으로 나눈 몫인 3을 *(별)에 곱하여 출력하고, 출력횟수도 이 몫만큼 반복하여 출력함
- 단, 위에서 나눈 나머지만큼 마지막줄에 *(별)을 출력해야하기 때문에, 마지막 if문을 통해 1번 출력
print('*을 출력합니다.')
n = int(input('총 몇 개를 출력할까요?'))
w = int(input('몇 개마다 줄바꿈할까요?'))
for i in range(n // w):
print('*' * w)
tail = n % w
if tail:
print('*' * tail)
2. 10~99 사이의 난수 n개 생성하기
- random 내장 라이브러리 사용
- randint() ⇢ 파라미터로 시작숫자와 끝숫자를 받고, 이 범위 안에서 난수를 돌려줌
- 이를 반복문을 통해 숫자를 뽑고, 줄바꿈을 없앰(end='')
import random
n = int(input('난수의 갯수를 입력하세요. : '))
for i in range(n):
r = random.randint(10, 99)
print(r,"", end='')
3. 넓이가 area인 사각형의 변의 길이 나열하기
- i x i 가 사격형의 넓이인 area를 초과하면 반복문을 빠져나가고, area를 i로 나눈 나머지가 있다면 무시하고 반복문을 계속 진행하게함
area = int(input('사각형의 넓이를 입력하세요 : '))
for i in range(1, area+1):
if i * i > area: break
if area % i: continue
print(f'{area}가 넓이인 사각형의 변의길이 : {i} x {area // i}')
- 위에 코드 중 정사각형을 제외하고 싶다면, if문을 추가하면됨
area = int(input('사각형의 넓이를 입력하세요 : '))
for i in range(1, area+1):
if i * i > area: break
if area % i: continue
if i * i == area: continue
print(f'{area}가 넓이인 직사각형의 변의길이 : {i} x {area // i}')
4. 별로 왼쪽 아래가 직각인 이등변 삼각형 출력하기
- n이 5일 때, i가 0부터 4까지 5회 반복되기 때문에 총 별(*)이 5줄로 배치
- i가 0일 때, 내부 for문이 작동하면
for j in range(1)
이 되어 *(별)이 1개 생성되고 줄바꿈 발생
- i가 1일 때, 내부 for문
for j in range(2)
은 j가 0과 1일 때 2번 작동하기 때문에 *(별)이 2개 찍힘
- 이런식으로 0부터 4까지 i가 증가하기 때문에 *(별)은 1개, 2개, 3개, 4개, 5개씩 찍히면 줄바꿈을 함
print('왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.')
n = int(input('짧은 변의 길이를 입력하세요. : '))
for i in range(n):
for j in range(i + 1):
print('*', end='')
print()
5. 별로 오른쪽 아래가 직각인 이등변 삼각형 출력하기
- n이 10이라면, 최초 for문에서 i는 0부터 9까지 반복되기 때문에 10개의 줄로 내부 for문이 작동
for _ in range(n - i - 1):
에서 n은 10으로 고정이지만, i가 0부터 9까지 증가하기 때문에 range의 값은 9부터 0까지 변화함
- 이를 줄바꿈없이 표시하기 때문에 공백이 첫줄에는 9개, 마지막줄에는 0개 생성
- 줄바꿈없이 아래 for문에서 *(별)을 찍어주기 때문에 별은 1개부터 10개까지 증가
- 1줄 : [공백*9번 반복]+[별*1번]
- 2줄 : [공백*8번 반복]+[별*2번]
- n줄 : [공백*(n-i-1)번 반복]+[별*(i+1)번]
print('왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.')
n = int(input('짧은 변의 길이를 입력하세요. : '))
for i in range(n):
for _ in range(n - i - 1):
print(' ', end='')
for _ in range(i + 1):
print('*', end='')
print()