기초 수학 문제풀이

YJ·2023년 3월 16일

▷ 오늘 학습 내용: 기초수학 강의(문풀 1~3)

01_약수와 소수

  • 100부터 1000사이의 난수에 대해 약수, 소수, 소인수 출력
    import random
    randN = random.randint(100,1000)

    # 약수    
    for i in range(1, randN+1):
        if randN % i == 0:
            print('약수: {}'.format(i))

    # 소수    
    for i in range(2, randN+1):    
        flag = True
        
        for num in range(2,i):
        
            if i % num == 0:
                flag = False
                break
                
        if (flag):
            print('소수: {}'.format(i))

    # 소인수    
    n=2
    while n <= randN:
    
        if randN % n == 0:
            print('소인수: {}'.format(n))
            randN /= n
            continue
            
        else:
            n+=1

02_소인수와 소인수분해

  • 100부터 1000사이의 난수를 소인수분해 하고 각각의 소인수에 대한 지수를 출력해보자
    import random
    rNum = random.randint(100,1000)
    print(rNum)

    result = []
    n=2
    while n <= rNum:
        if rNum % n == 0:
            print('소인수: {}'.format(n))
            result.append(n)
            rNum /= n
        else:
            n += 1

    tempNum = 0
    for s in result:
        if tempNum != s:
            print(f'{s}의 개수: {result.count(s)}')
            tempNum = s

03_최대공약수

  • 100부터 1000사이의 2개의 난수에 대해 공약수 및 최대공약수를 출력하고, 서로소인지 출력해보자
    import random
    rNum1 = random.randint(100,1000)
    rNum2 = random.randint(100,1000)
    print('rNum1: {}, rNum2: {}'.format(rNum1, rNum2))

    for i in range(1, min(rNum1,rNum2)+1):
        if rNum1 % i == 0 and rNum2 % i == 0:
            print('공약수: {}'.format(i))
            maxNum = i
            
    print('최대공약수: {}'.format(maxNum))

    if maxNum == 1:
        print(f'{rNum1}{rNum2}는 서로소이다.')

04_등차 수열

  • 등차 수열의 n번째 항의 값과 n번째 항까지의 합을 출력
    num1 = int(input('a1 입력: '))
    d = int(input('공차 입력: '))
    inputNum = int(input('n 입력: '))

    valueN = 0
    sumN = 0
    
    n=1
    while n <= inputNum:
        if n == 1:
            valueN = num1
            sumN += valueN
            n+=1
            continue
            
        valueN += d
        sumN += valueN
        n += 1
        
    print('{}번째 항: {}'.format(inputNum, valueN))
    print('{}번째 항까지의 합: {}'.format(inputNum, sumN))

05_등비 수열

  • 등비수열의 n번째 항의 값과 n번째 항까지의 합을 출력
    num1 = int(input('a1 입력: '))
    r = int(input('공비 입력: '))
    inputNum = int(input('n 입력: '))

    sumN = 0
    valueN = 0

    n=1
    while n <= inputNum:
        if n == 1:
            valueN = num1
            sumN += valueN
            n += 1
            continue

        valueN *= r
        sumN += valueN
        n += 1

    print('{}번째 항: {}'.format(inputNum, valueN))
    print('{}번째 항까지의 합: {}'.format(inputNum, sumN))

06_피보나치 수열

  • 피보나치 수열에서 n번째 항의 값과 n번째 항까지의 합을 출력
    inputN = int(input('n 입력: '))
    valueN = 0; sumN = 0
    preN1 = 0; preN2 = 0

    n=1
    while n <= inputN:
        if n == 1 or n == 2:
            valueN = 1
            preN1 = valueN
            preN2 = valueN
            sumN += valueN

            n += 1

        else:
            valueN = preN1 + preN2
            preN2 = preN1
            preN1 = valueN
            sumN += valueN
            n += 1

    print('{}번째 항의 값: {}'.format(inputN, valueN))
    print('{}번째 항까지의 합: {}'.format(inputN, sumN))
        

07_군 수열

  • 수열의 합이 최초 100을 초과하는 n번째 항의 값과 n 출력
    수열: 1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1,...
    n = 1; nCnt = 1
    searchNC = 0; searchNP = 0; sumN = 0

    flag = True
    while flag:
        for i in range(1, n+1):
            print('{}/{} '.format(i, n-i+1)), end='')

            sumN += i/(n-i+1)
            nCnt += 1

            if sumN > 100:
                searchNC = i
                searchNP = n-i+1
                flag = False
                break
        print()
        n += 1

    print(f'{nCnt}항일 때 값: {searchNC}/{searchNP}, 합: {sumN}')

08_순열과 조합

    inputN = int(input('N입력: '))
    inputR = int(input('R입력: '))

    resultP = 1; resultR = 1; resultC = 1
	
    # 순열
    for i in range(inputN, inputN-inputR, -1):
        resultP *= i
        
	# 팩토리얼
    for j in range(inputR, 0, -1):
        resultR *= j
        
	# 조합
    resultC = int(resultP/resultR)
    print(resultC)

📝 수학 공식 외우는 것과 파이썬 코딩은 또 다르다는 것을 느꼈다. 반복문이랑 함수는 이미 배웠는데도 그렇게 능숙하지는 않았다. 강의 보면서 이해 했다고 넘어가지 말고 계속 풀어봐야겠다.

📝 기초수학 퀴즈 소감
대체적으로 개념을 묻는 문제가 많이 나왔다. 객관식인데 모두 고르라는 문제에서 조금 더 고민하긴 했지만 난이도는 높지 않았던 것 같다.

▷ 내일 학습 계획: 자료구조 강의(1~4)

[이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.]

0개의 댓글