Do it! 자료구조와 함께 배우는 알고리즘 입문(파이썬) :: DAY 02
ch01. 알고리즘 기초
01-2 반복하는 알고리즘
while 문 반복
반복 구조(루프) : 어떤 조건이 성립하는 동안 반복해서 처리하는 것
사전 판단 반복 구조 : 실행하기 전에 반복을 계속할 것인지를 판단
for 문
변수가 하나만 있을 때는 while보다는 for 사용
가우스 덧셈
가우스 덧셈 = n(n+1)/2 (1부터 n까지 정수의 합)
range() 함수로 이터러블 객체 생성
range(n) : 0이상 n미만의 수열
range(a, b) : a이상 b미만의 수열
range(a, b, step) : a이상 b미만인 수를 step 간격으로 나열하는 수열
이터러블
이터러블 객체 : 반복할 수 있는 객체
이터러블 자료형 : list, str, tuple
두 값 교환하기
1. a, b = b, a
1.1 우변의 b, a에 의해 두 값을 압축한 튜플(b, a) 생성
1.2 대입할 때 튜플 (b, a)를 다시 풀어 b, a로 만든 다음 각각 a, b에 대이
2. 임시용 변수 사용
반복 과정에서 조건 판단하기
for i in range(a, b+1):
if i < b:
print(f'{i} + ', end='')
else:
print(f'{i} = ', end='')
sum += i
for i in range(a, b)
print(f'{i} + ', end='')
sum += i
print(f'{b}= ', end='')
sum += b
if 문은 마지막에 단 1번 실행을 위해 계속 실행 > for 문 안에 있는 if문을 제외하여 별도로 두기
나였으면 첫 번째처럼 코드를 짜고 넘어갔을 것 같다
설명을 보고 생각해보니 정말 마지막 부분만 빼면 굳이 if/else가 필요 없었다
무한 루프와 break 문
while True:
n = int(input())
if n > 0:
break
while 문의 조건식에 True > 무한루프
반복문 안에서 break문을 실행하면 반복문을 종료할 수 있다
사후 판단 반복문
사후 판단 반복문 : 루프 본문을 한 번 실행한 다음 계속 반복할지 판단
대표적으로 do ~ while, repeat ~ until 등 > break 사용하지 않고 멈추기 가능
하지만 파이썬은 사후 판단 반복문을 제공하지 않으므로 break문 필수적
for/else 문
for _ in range(n):
r = random.randint(10, 99)
print(r, end='')
if r == 13:
print('\n프로그램 중단')
break
else:
print('\n난수 생성 종료')
for 문 안에 if가 실행될 경우 break로 반복문이 강제 종료됨과 동시에 else문도 실행하지 않는다
for문 안에 반복문이 모두 종료되면 else문이 실행된다
즉 for문안에 모두 실행되어야 else가 실행되고 끝, 이 부분이 코드 짤 때 자꾸 헷갈린다
비교 연산자 연속, 드모르간의 법칙
if 10 <= n and n <=99:
if not(n < 10 or n > 90)
드모르간의 법칙 : 각 조건을 부정하고 논리곱을 논리합으로, 논리합을 논리곱으로 바꾸고 다시 전체를 부정하면 원래의 조건과 같다
1. x and y와 not(not x or not y)의 논릿값은 같다
2. x or y와 not(not x and not y)의 논릿값은 같다
while True:
if no >= 10 and no <=99:
break
while True:
if not(no < 10 and no > 99):
break
구조적 프로그래밍
구조적 프로그래밍 : 입력과 출력으로 이루어진 구성 요소를 계층으로 배치하여 프로그램을 구성하는 방법
구조적 프로그래밍은 순차, 선택, 반복이라는 3 종류의 제어 흐름 사용
다중루프
반복문이 중첩하는 정도에 따라 이중 루프 삼중 루프 이런 식으로 이름을 붙이고 이를 통틀어 다중루프라고 한다
random.randint() 함수
random.randint(a, b)는 a 이상 b 이하인 난수를 생성하여 반환한다(a 이상 b 이하 정수 가운데 무작위로 1개 뽑아 반환)
파이썬의 변수
파이썬에서는 데이터, 함수, 클래스, 모듈 패키지 등을 모두 객체로 취급한다
객체는 자료형을 가지며 메모리(저장공간)를 차지한다
즉, 파이썬의 변수는 값을 갖지 않는다
> 변수는 객체를 참조하는 객체에 연결된 이름일 뿐이다
> 모든 객체는 메모리를 차지하고, 자료형뿐만 아니라 식별 번호를 가진다
> 예를 들어 c언어에서 함수 내부에 선언한 지역 변수는 함수가 실행될 때 생성되고 종료될 때 소멸한다
파이썬에는 이런 개념 자체가 없다는 뜻이다
파이썬에서는 함수가 시작되고 종료함에 따라 객체가 생성되거나 소멸하지 않는다