기초수학(9~13번)

3_026. 순열(파이썬)

ex)8P3

inputN =int(input('n 입력 : 8'))
inputR =int(input('r 입력 : 3'))

result = 1
for n in range(inputN, (inputN - inputR), -1):
result = result * n
print('n : {}'.format(n))

print('result : {}'.format(result))

출력값 :

n 입력 : 8
r 입력 : 3
n : 8
n : 7
n : 6
result : 336

원순열 : 시작과 끝이 구분이 없는 순열
n! / n or (n-1)!

3_027. 조합(순서 상관없이 r개 선택하자!)

<-> 순열과 반대( 순열은 순서 중요함.)

조합 : n개에서 r개를 선택하는 경우의 수
순열(nPr)의 공식 : n! / (n-r)!
조합(nCr)의 공식 : nPr / r!

3_028. 조합(파이썬)

ex)
numN = int(input('n 값 : 5'))
numR = int(input('r 값 : 2'))

resultP = 1
resultR = 1
resultC = 1

for n in range(numN, (numN - numR), -1):
print('n : {}'.format(n))
resultP = resultP * n

print('resultP 의 값 : {}'.format(resultP))

for n in range(numR, 0, -1):
print('n : {}'.format(n))
resultR = resultR * n

print('resultR 의 값 : {}'.format(resultR))

resultC = int(resultP / resultR)
print('resultC의 값 : {}'.format(resultC))

출력값 :

n 값 : 5
r 값 : 2
n : 5
n : 4
resultP 의 값 : 20
n : 2
n : 1
resultR 의 값 : 2
resultC의 값 : 10

3_029~30. 확률(파이썬)

  • 확률 : 모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것.

ex) [동전]
모든사건 : 앞, 뒤 ->2가지 경우 ( 표본 공간)
특정사건 : 앞 -> 1가지 경우, 뒤 -> 1가지 경우 (
사건)
확률 : 앞-> 1/2, 뒤 -> 1/2

  • 조합을 이용해서 확률을 알아낼 수 있다.

3_031. 연습문제(약수와 소수)

ex)
import random *난수

rNum = random.randint(100, 1000)
print(f'rNum:{rNum}')

for num in range(1, rNum + 1 ):

soinsuFlag = 0


#약수
if rNum % num == 0:
    print(f'[약수] : {num}')
    soinsuFlag += 1

#소수
if num != 1:
    flag = True
    for n in range(2, num):
        if num % n == 0:
            flag = False
            break

    if(flag):
        print(f'[소수] : {num}')
        soinsuFlag += 1
#소인수
if soinsuFlag >= 2:
    print(f'[소인수] : {num}')
    

3_032. 연습문제(소인수와 소인수분해)

ex) 소인수분해를 한 후 각각의 소인수에 대한 지수를 출력
import random

rNum = random.randint(100, 1000)
print(f'rnum : {rNum}')

soinsuList = []

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

print(f'soinsulist : {soinsuList}')

tempNum = 0
for s in soinsuList:
if tempNum != s:
print(f'{s}\'s count : {soinsuList.count(s)}')
tempNum = s

출력값 :

rnum : 262
소인수 : 2
소인수 : 131
soinsulist : [2, 131]
2's count : 1
131's count : 1

3_033. 연습문제(최대공약수)

ex)난수를 이용해 공약수와 최대공약수를 출력하자.
import random
rNum1 = random.randint(100, 1000)
rNum2 = random.randint(100, 1000)

print(f'rNum1 : {rNum1}')
print(f'rNum2 : {rNum2}')
maxNum = 0

for n in range(1, min(rNum1, rNum2)):
if rNum1 % n == 0 and rNum2 % n == 0:
print(f'공약수 : {n}')
maxNum = n

print(f'최대공약수 : {maxNum}')

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

3_034. 연습문제(최소공배수)

ex)최소공배수는 최대공약수를 구하면 쉽다.
최소공배수 = (정수 x 정수 ) // 최대공약수 : 나눈 몫이 최소공배수
import random

rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)

print(f'rNum1 : {rNum1}')
print(f'rNum2 : {rNum2}')

maxNum = 0
for n in range(1, min(rNum1, rNum2) + 1):
if rNum1 % n == 0 and rNum2 % n ==0:
print(f'공약수 : {n}')
maxNum = n

print(f'최대공약수 : {maxNum}')

minNum = (rNum1 * rNum2) // maxNum
print(f'최소공배수 : {minNum}')

3_035. 연습문제(진법)

#10진수 ->2,8,16 진수 변환
#x진수 ->10진수
x 진수 ->x진수

dNum = int(input('10진수 입력 : '))

print('2진수 : {}'.format(bin(dNum)))
print('8진수 : {}'.format(oct(dNum)))
print('16진수 : {}'.format(hex(dNum)))

print('2진수(0b10101) -> 10진수{}'.format(int('0b10101', 2)))
print('8진수(0o12312 -> 10진수({})'.format(int('0o12312', 8)))
print('16진수(0x19)-> 10진수{}'.format(int('0x19', 16)))

print('8진수(0o675) ->2진수({})'.format(bin(0o675)))
print('8진수(0o675) ->10진수({})'.format(int(0o675)))
print('8진수(0o675) ->16진수({})'.format(hex(0o675)))

print('16진수(0x45d) ->2진수({})'.format(bin(0x45d)))
print('16진수(0x45d) ->8진수({})'.format(oct(0x45d)))
print('16진수(0x45d) ->10진수({})'.format(int(0x45d)))

3_036. 연습문제(등차수열)

  • 일반항 = a1 + (n - 1)*d
  • 수열의 합 = n * (a1+an) / 2

num1 = int(input('a1 값 : '))
numD = int(input('공차 값 : '))
numN = int(input('n : '))

valueN = num1 + (numN - 1) numD
sumN = numN
(num1 + valueN) / 2

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

3_037. 연습문제(등비수열)

  • 일반항 = a1 * r^(n-1)
  • 수열의 합 = a1 * (1-r^n) / (1-r)

ex) 등비수열 공식을 이용한
numA1 = int(input('a1 항 : '))
numR = int(input('공비 : '))
numN = int(input('n : '))

valueN = numA1 numR ** (numN -1)
sumN = numA1
(1 - numR ** numN) / (1 - numR)

print('{}항의 값 : {}'.format(numN, valueN))
print('{}까지 항의 합 : {}'.format(numN, int(sumN)))

3_039. 연습문제(계차수열)

  • an = (3n^2 -3n + 4) / 2

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

valueN = ((3 inputN ** 2) - (3 inputN) + 4) / 2
print('an의 {}번째 항의 값 : {}'.format(inputN, int(valueN)))

3_040. 연습문제(피보나치수열)

  • an = a(n-2) + a(n-1)

ex)
inputN = int(input('n 의 값 : '))
valueN = 0; sumN = 0
valueNPreN2 = 0
valueNPreN1 = 0
n = 1

while n <= inputN:
if n == 1 or n == 2:
valueN = 1
valueNPreN2 = valueN
valueNPreN1 = valueN
sumN += valueN
n += 1

else:
    valueN = valueNPreN2 + valueNPreN1
    valueNPreN2 = valueNPreN1
    valueNPreN1 = valueN
    sumN += valueN
    n += 1

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

3_040. 연습문제(팩토리얼)

ex)재귀함수를 이용해서 팩토리얼 값을 출력
def facFun2(n):

if n == 1:           *0이 되면 안되기 때문에 활용
    return n

return n * facFun2(n-1)

num = int(input('input number : '))
print(f'{num}! : {facFun2(num)}')

ex)math 모듈을 이용한 팩토리얼 값 구하기.

import math
num = int(input('input number : '))
math.factorial(num)
print(f'{num}! : {math.factorial(num)}')

3_041. 연습문제(군수열)

ex)수열의 합이 최초 100을 초과하는 n번째 항의 값과 n을 출력하는 프로그램 만들기.

flag= True
n = 1
nCnt = 1; searchNC = 0; searchNP = 0
sumN = 0
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

3_043. 연습문제(순열)

일렬로 나열하는 경우의 수!

ex)
numN = int(input('n : ' ))
numR = int(input('r : ' ))
result = 1

for n in range(numN, numN - numR, -1):
print("n : {}".format(n))
result *= n
print('result : {}'.format(result))

3_043. 연습문제(조합)

순서상관없이 r개 선택하자

nCr = nPr / r!

profile
안녕하세요~

0개의 댓글