230922_스터디노트

Sihyun Kim·2023년 9월 22일

기초수학

38_[연습문제] 시그마

userA1 = int(input('첫 번째 항 입력: '))
userR = int(input('공비 입력: '))
userN = int(input('N 입력: '))

valueN = 1
sumN = 0

for i in range(1, userN+1):
    valueN *= userR
    sumN += valueN

valueN = format(valueN, ',')
sumN = format(sumN, ',')
print(valueN)
print(sumN)

39_[연습문제] 계차수열

inputA1 = int(input('a1 입력: '))
inputN = int(input('n 입력: '))

valueN = 0


inputB1 = int(input('b1 입력: '))
inputBd = int(input('공차 입력: '))

valueBN = 0

# a2 = a1 + b1 , a3 = a2 + b2

n = 1
flag = True
while flag:

    if n == 1:
        valueN = inputA1
        valueBN = inputB1
        n += 1

    elif n <= inputN:
        valueN += valueBN
        valueBN += inputBd

        n += 1

    else:
        flag = False

print(valueN)
  • 일반항을 구하는 공식을 굳이 외우고 싶지 않아서, 우선 while문으로 풀었음
  • 수학 공식 외우는 건 쉽지 않아요...

40_[연습문제] 피보나치수열

inputN = int(input('n 입력: '))

valueA = 0
valueB = 0
valueN = 0

# valueN = valueA + valueB 피보나치 수열

sumN = 0

n = 1

while n <= inputN:
    if n == 1:
        valueN = 1
        sumN += valueN

    elif n == 2:
        valueB = valueN
        valueN = valueA + valueB
        sumN += valueN

    else:
        valueA = valueB
        valueB = valueN

        valueN = valueA + valueB
        sumN += valueN


    n += 1


print(f'{inputN}항의 값: {valueN}')
print(f'{inputN}까지의 합: {sumN}')

41_[연습문제] 팩토리얼

  • 반목문을 이용한 경우
def facFun(n):

    num = 1
    for i in range(1, n+1):
        num *= i

    return num

userNum = int(input('숫자를 입력하세요: '))
print(f'{userNum}! : {facFun(userNum)}')
  • 재귀 함수를 이용한 경우
def facFun2(n):

    if n == 1:
        return n

    return n * facFun2(n-1)

userNum = int(input('숫자를 입력하세요: '))
print(f'{userNum}! : {facFun2(userNum)}')
  • 파이썬 내장 모듈을 사용한 경우
import math
userNum = int(input('숫자를 입력하세요: '))
math.factorial(userNum)
print(f'{userNum}! : {math.factorial(userNum)}')
  • 😉 재귀 함수 어렵지만 나중에 많이 써먹어야 할 듯 하니 친해지기!

42_[연습문제] 군 수열

valueChild = 0
valueMother = 0

valueN = 0
sumN = 0

k = 1           #군
nCnt = 1         #항

flag = True
while flag:

    for i in range(1, k+1):
        valueChild = i
        valueMother = k - i + 1

        print(f'{valueChild}/{valueMother} ', end='')

        valueN = valueChild / valueMother
        sumN += valueN
        nCnt += 1


        if sumN > 100:
            flag = False

    k += 1
    print()

print(f'{nCnt}항')
print(f'합: {round(sumN, 2)}')
  • 50% 정도만 혼자 힘으로 해결
  • 분모가 -1 되는걸 표현한다고 for문을 두개 썼더니 제대로 안돌아감... 마이너스 되는건 k와 i값을 빼고 1을 더해서 표현할 수 있음!!! 수학적인 머리 필요 ㅠㅠ
  • while, for, if 문의 indent에 따라 결과값이 완전히 달라진다

43_[연습문제] 순열

  • 순열 공식 한번 더 확인
    nPr = n (n-1) (n-2) * ... (n-r+1)
userN = int(input('numN 입력: '))
userR = int(input('numR 입력: '))

result = 1

for i in range(userN, (userN-userR), -1):
    print(f'n: {i}')
    result *= i

print(f'result: {result}')
import math
userNum1 = int(input('userNum1: '))
userNum2 = int(input('userNum2: '))

result = math.factorial(userNum1) * math.factorial(userNum2)

print(f'경우의 수: {result}')

44_[연습문제] 조합

import math

userN = int(input('n 입력: '))
userR = int(input('r 입력: '))

resultP = 1

#nCr = n(n-1)...(n-r+1) / r!

for i in range(userN, userN-userR, -1):
    resultP *= i

resultC = resultP / math.factorial(userR)
print(f'result: {int(resultC)}')

45_[연습문제] 확률

def combiFun():

    import math

    userN = int(input('n 입력: '))
    userR = int(input('r 입력: '))
    resultP = 1
    resultC = 1

    for i in range(userN, userN-userR, -1):
        resultP *= i

    resultC = resultP / math.factorial(userR)

    return resultC


resultM = combiFun()
resultK1 = combiFun()
resultK2 = combiFun()

final = (resultK1 * resultK2 / resultM) * 100
final = round(final, 2)
print(f'{final}%')

자료구조

13_리스트의 특정 아이템 삭제

  • remove() 함수를 이용해서 특정 아이템을 삭제
  • 아이템의 내용을 직접 써서 삭제!
  • 리스트의 앞에 있는 한 개의 아이템만 삭제 가능함. 중복값 여러개를 한번에 삭제하려면 while문을 이용하자.
sports = ['테니스', '농구', '마라톤', '수영', '사격', '수영', '농구']

print(sports)			

sports.remove('수영')

print(sports)				#['테니스', '농구', '마라톤', '사격', '수영', '농구']

while '농구' in sports:
    sports.remove('농구')

print(sports)				#['테니스', '마라톤', '사격', '수영']
  • 실습 1
toDoList = ['마케팅 회의', '회의록 정리', '점심 약속', '월간 업무 보고', '치과 방문', '마트 장보기']

print(toDoList)
removeItem = input('삭제 대상 입력: ')

toDoList.remove(removeItem)

print(toDoList)
  • 실습 2
toDoList = ['국어', '영어', '수학', '과학', '국사']
print(toDoList)
removeItem = input('삭제 대상: ')

while removeItem in toDoList:
    toDoList.remove(removeItem)

print(toDoList)

14_리스트 연결

  • extend()는 리스트에 또다른 리스트를 연결하여 확장
  • 덧셈 연산자를 이용해서 리스트 연결 가능
myList = [1 ,3 ,5, 6, 7]
friendList = [2, 3, 5, 8, 10]
addList = myList + friendList

result = []
for item in addList:
    if item not in result:
        result.append(item)

print(result)

15_리스트 아이템 정렬

  • sort() 함수: 오름차순으로 정렬
    sort(reverse=True)함수: 내림차순으로 정렬
scoreList = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]

scoreList.sort()

scoreList.pop(0)
scoreList.pop(len(scoreList)-1)

print(scoreList)

sumN = 0
avg = 0

for score in scoreList:
    sumN += score

avg = sumN / len(scoreList)

print('합계: %.2f' % sumN)
print('평균: %.2f' % avg)
  • 소수점 두 번째 자리까지 표현하는 방법 외워두기!

16_리스트 아이템 순서 뒤집기

  • reverse() 함수를 이용하면 아이템 순서를 거꾸로 뒤집을 수 있음
secretNum = input('secret: ')
secretList = []
solvedAnswer = ''

for i in secretNum:
    secretList.append(int(i))

secretList.reverse()

print(secretList)

val = secretList[0] * secretList[1]
secretList.insert(2, val)

val = secretList[3] * secretList[4]
secretList.insert(5, val)

val = secretList[6] * secretList[7]
secretList.insert(8, val)

val = secretList[9] * secretList[10]
secretList.insert(11, val)

print(secretList)

print(solvedAnswer)

17_리스트 슬라이싱

  • [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다
    ex: [2:4] 인 경우, idx 2와 3의 값만 추출
  • 값을 생략하는 경우, 맨 뒤 또는 맨 앞을 참조
  • -1 값을 입력하는 경우, 뒤에서부터 카운트
  • [n:m:x] 와 같이 마지막 x 값을 추가하면 x칸에 하나씩 건너뛰기가 가능
  • 슬라이싱을 이용해서 아이템 변경이 가능
  • slide()함수도 이용 가능
students = ['봉석', '희수', '강훈', '기수', '별']

print(students[:3])			#['봉석', '희수', '강훈']
print(students[1:-2])		#['희수', '강훈']
print(students[slice(3, 5)])	#['기수', '별']

students[3:5] = ['양아치', '눈치빵']
print(students)				#['봉석', '희수', '강훈', '양아치', '눈치빵']
profile
문과이과예체능통합형인재

0개의 댓글