230919_스터디노트

Sihyun Kim·2023년 9월 19일

기초 수학

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문 사용)
#an = {3, 7, 13, 21, 31, 43, 57}
#       4,  6,  8, 10, 12, 14

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 입력: '))

# PreN2, PreN1, N
# N = PreN1 + PreN2

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!
  • 팩토리얼을 구하는 프로그램 (for문)
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)}')
  • math 모듈 사용하기
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개를 택하여 나열하는 경우의 수
#nPr = n * (n-1) * --- * (n-r+1)

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             # (n-1)!

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))				#<class 'list'>

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))			#<class 'list'>
print(type(students[0]))		#<class 'str'>
students = ['온유', '종현', '기범', '민호', '태민']

print('--인덱스가 짝수인 학생 --')
print(students[0])
print(students[2])
print(students[4])
print('--인덱스가 홀수인 학생 --')
print(students[1])
print(students[3])

#for문으로 변경

for i in range(5):
    if i % 2 == 0:
        print(f'인덱스 짝수: {students[i]}')
    else:
        print(f'인덱스 홀수: {students[i]}')

04_리스트 길이

  • 리스트 길이: 리스트에 저장된 아이템 개수
    len(변수이름)
  • len()과 반복문을 이용하면 리스트의 아이템 조회가 가능
students = ['온유', '종현', '기범', '민호', '태민']

#for문
for i in range(len(students)):
    print(f'index: {i}')
    print(students[i])
    
#while문
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}명)')
profile
문과이과예체능통합형인재

1개의 댓글

comment-user-thumbnail
2023년 10월 10일

if 조건
for 사용하는 횟수
while 횟수 (대량 메일 발송)

답글 달기