기초 수학
18_시그마
- 시그마: 수열의 합을 나타내는 기호

inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN1
sumN = valueN
n += 1
else:
valueN *= inputR
sumN += valueN
n += 1
print(f'{inputN}번째 항까지의 합: {sumN}')
19_계차 수열
- 계차 수열: 어떤 수열의 인접하는 두 항의 차로 이루어진 또 다른 수열
- 계차 수열을 이용해서 수열 an의 일반항을 구할 수 있음
- n번째 항의 값을 구하는 프로그램 (while문 사용)
inputAN1 = int(input('a1 입력: '))
inputAN = int(input('an 입력: '))
inputBN1 = int(input('b1 입력: '))
inputN = int(input('bn 공차 입력: '))
n = 1
valueAN = 0
valueBN = 0
while n <= inputAN:
if n == 1:
valueAN = inputAN1
valueBN = inputBN1
n += 1
continue
valueAN += valueBN
valueBN += inputN
n += 1
print(f'{inputAN}번째 항의 값: {valueAN}')
- 정신건강을 위해 공식 외워서 하는 건 일단 안하겠어요 🤪
21_피보나치 수열
- 세 번째 항은 두 번째 항과 첫 번째 항을 더한 합이다.
- 1, 1, 2, 3, 5, 8, 13, 21
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valuePreN2 = 0
valuePreN1 = 0
n = 1
while n <= inputN:
if n == 1 or n == 2:
valueN = 1
valuePreN1 = valueN
valuePreN2 = valueN
sumN += valueN
n += 1
else:
valueN = valuePreN2 + valuePreN1
valuePreN2 = valuePreN1
valuePreN1 = valueN
sumN += valueN
n += 1
print(f'{inputN}번째 항의 값: {valueN}')
print(f'{inputN}번째 항까지의 합: {sumN}')
- valuePre1,2 새로 지정해주는 순서를 바꾸면 값이 다르게 나옴 주의!
22_팩토리얼
- 팩토리얼: 1부터 양의 정수 n까지의 정수를 모두 곱한 것
- 0!은 1로 약속한다 0! = 1!
inputN = int(input('n 입력: '))
valueN = 1
for i in range(1, inputN+1):
valueN *= i
print(f'{inputN} 팩토리얼 : {valueN}')
inputN = int(input('n 입력: '))
def factorialFun(n):
if n == 1: return 1
return n * factorialFun(n-1)
print(f'{inputN} 팩토리얼 : {factorialFun(inputN)}')
import math
inputN = int(input('n 입력: '))
print(f'{inputN} 팩토리얼 : {math.factorial(inputN)}')
23~24_군 수열
- 군수열: 여러 개의 항을 묶었을 때 규칙성을 가지는 수열
inputN = int(input('n 입력: '))
flag = True
n = 1
cntN = 1
searchN = 0
while flag:
for i in range(1, (n+1)):
if i == n:
print(f'{i}', end='')
else:
print(f'{i},', end='')
cntN += 1
if cntN > inputN:
searchN = i
flag = False
break
print()
n += 1
print()
print(f'{inputN}항의 값: {searchN}')
- while문이 돌면서 += 하는 변수들이 많고, 아래에 for문과 if문이 중첩되어서 사용되는데, 어디에 뭐가 포함되어야 하는지 헷갈림.. 🤪 나중에 다시 체크!
25~26_순열
- n개에서 r개를 택하여 나열하는 경우의 수

inputN = int(input('n 입력: '))
inputR = int(input('r 입력: '))
result = 1
for i in range(inputN, (inputN-inputR), -1):
result *= i
print(f'result: {result}')
- 원 순열: 시작과 끝의 구분이 없는 순열

n = int(input('친구 수 입력: '))
result = 1
for i in range(1, n):
result *= i
print(result)
자료 구조
01_자료구조란?
- 자료구조: 여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 함
- 자료형의 종류
- 리스트 List ['이효리', '옥주현', '이진', '성유리']
- 튜플 Tuple ('이효리', '옥주현', '이진', '성유리') *튜플은 리스트와 달리 바꿀 수 없음
- 딕셔너리 Dic {'이효리':79, '옥주현':80, '이진':80, '성유리':81}
- 셋트 Set {79, 80, 81} * 중복값이 존재할 수 없음
finklList = ['이효리', '옥주현', '이진', '성유리']
finklTuple = ('이효리', '옥주현', '이진', '성유리')
birth = {'이효리': 79, '옥주현': 80, '이진': 80, '성유리': 81}
year = {79, 80, 81}
print(finklList)
print(type(finklList))
for member in finklList:
print(member)
02_리스트(List)
- 리스트: 배열과 같이 여러 개의 데이터를 나열한 자료구조
- [ ]를 이용해서 선언하고, 데이터(아이템) 구분은 , 를 이용한다
- 숫자, 문자, 논리형 등 모든 기본 데이터를 같이 저장 가능
- 리스트에 또 다른 컨테이너 자료형 데이터를 저장 가능
myFamNames = ['홍아빠', '홍엄마', '홍길동', '홍동생']
print(myFamNames)
todaySchedule = ['10시 업무 회의', '12시 친구와 점심 약속', '15시 자료 정리', '18시 테니스, 21시 스우파 시청']
print(todaySchedule)
03_리스트 아이템 조회
- 인덱스: 아이템에 자동으로 부여되는 번호표 (0부터 시작)
students = ['이효리', '옥주현', '이진', '성유리']
print(students[0])
print(students[1])
print(students[2])
print(students[3])
print(type(students))
print(type(students[0]))
students = ['온유', '종현', '기범', '민호', '태민']
print('--인덱스가 짝수인 학생 --')
print(students[0])
print(students[2])
print(students[4])
print('--인덱스가 홀수인 학생 --')
print(students[1])
print(students[3])
for i in range(5):
if i % 2 == 0:
print(f'인덱스 짝수: {students[i]}')
else:
print(f'인덱스 홀수: {students[i]}')
04_리스트 길이
- 리스트 길이: 리스트에 저장된 아이템 개수
len(변수이름)
- len()과 반복문을 이용하면 리스트의 아이템 조회가 가능
students = ['온유', '종현', '기범', '민호', '태민']
for i in range(len(students)):
print(f'index: {i}')
print(students[i])
n = 0
while n < len(students):
print(f'index: {n}')
print(students[n])
n += 1
myFavSports = ['테니스', '웨이트', '필라테스', '등산']
for item in myFavSports:
print(item)
05_리스트와 for문 (01)
- for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다
studentCnts = [[1,20], [2,21], [3,33], [4,20], [5,14]]
for i in range(len(studentCnts)):
print(f'{studentCnts[i][0]}반의 학생수: {studentCnts[i][1]}')
for classNo, cnt in studentCnts:
print(f'{classNo}반의 학생수: {cnt}')
studentCnts = [[1,18], [2,19], [3,23], [4,21], [5,20], [6,22], [7,17]]
sum = 0
avg = 0
for classNo, cnt in studentCnts:
print(f'{classNo}학급 학생수: {cnt}명')
sum += cnt
avg = sum / len(studentCnts)
print(f'전체 학생 수: {sum}명')
print(f'평균 학생 수: {avg}명')
06_리스트와 for문 (02)
minScore = 60
scores = [['국어', 58], ['영어', 77], ['수학', 89], ['과학', 99], ['국사', 50]]
for item, score in scores:
if score < minScore:
print(f'과락 과목: {item}, 점수: {score}')
studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]
maxClass = 0
maxStudent = 0
minClass = 0
minStudent = 0
for classNo, stuCnt in studentCnts:
if classNo == 1:
maxClass = classNo
maxStudent = stuCnt
minClass = classNo
minStudent = stuCnt
else:
if stuCnt > maxStudent:
maxStudent = stuCnt
maxClass = classNo
elif stuCnt < minStudent:
minStudent = stuCnt
minClass = classNo
print(f'학생 수가 가장 적은 학급(학생수): {minClass}학급({minStudent}명)')
print(f'학생 수가 가장 많은 학급(학생수): {maxClass}학급({maxStudent}명)')
if 조건
for 사용하는 횟수
while 횟수 (대량 메일 발송)