반응형
계차수열
# 두 항의 차로 이루어진 수열
# 어떤 수열이 인접하는 또다른 수열
# 계차수열을 이용하여 구할 수 있음
# n번째 항의 값을 출력하는 프로그램
inputAN1 = int(input("a1 입력: "))
inputAN = int(input("an 입력: "))
inputBN1 = int(input("b1 입력: "))
inputBD = int(input("bn 공차 입력: "))
valueAN = 0
valueBN = 0
n = 1
while n <= inputAN:
if n == 1:
valueAN = inputAN1
valueBN = inputBN1
print("an의 {}번째 항의 값:{}".format(n, valueAN))
print("bn의 {}번째 항의 값:{}".format(n, valueBN))
n += 1
continue
valueAN = valueAN + valueBN
valueBN = valueBN + inputBD
print("an의 {}번째 항의 값:{}".format(n, valueAN))
print("bn의 {}번째 항의 값:{}".format(n, valueBN))
n += 1
print("an의 {}번째 항의 값:{}".format(inputAN, valueAN))
print("bn의 {}번째 항의 값:{}".format(inputAN, valueBN))
군수열
# 군수열 : 여러 개의 항을 묶었을 때 규칙성을 가지는 수열
from turtle import Turtle
inputN = int(input("n항 입력:"))
flag = True
n = 1 ; nCnt = 1 ; searchN = 0
while flag:
for i in range(1, (n+1)):
if i == n :
print("{} ".format(i), end="")
else:
print("{}, ".format(i), end="")
nCnt +=1
if (nCnt > inputN):
searchN = i
flag = False
break
print()
n += 1
print("{} 항 : {}".format(inputN, searchN))
inputN = int(input("n항 입력:"))
flag = True
n = 1 ; nCnt=1; searchNC = 0 ; searchNP = 0
while flag:
for i in range(1, (n+1)):
if i == n:
print("{}/{}".format(i, (n - i +1)), end =" ")
else:
print("{}/{}".format(i, (n -1 + 1)),end =" ")
nCnt += 1
if (nCnt > inputN):
searchNC = i
searchNP = n - i + 1
flag= False
break
print()
n +=1
print("{}항: {}/{}".format(inputN, searchNC, searchNP))
등비수열
# 등비수열 = 비가 같은 수열
inputN1 = int(input("a1 입력: "))
inputR = int(input("공비 입력: "))
inputN = int(input("n 입력: "))
valueN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN1
print("{}번째의 값: {}".format(n, valueN))
valueN *= inputR
print("{}번째 행의 값: {}".format(n, valueN))
n += 1
print("{}번째 행의 값: {}".format(inputN, valueN))
# 공식을 알경우, an = a1 * r(n-1)
inputN1 = int(input("a1 입력: "))
inputR = int(input("공비 입력: "))
inputN = int(input("n 입력: "))
valueN = inputN1 * (inputR**(inputN-1))
print(valueN)
# 등비수열 합을 구하는 코드
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
print("{}번째 항까지의 합: {}".format(n, sumN))
n += 1
continue
valueN *= inputR
sumN *= valueN
print("{}번째 항까지의 합: {}".format(n, sumN))
n += 1
print("{}번째 항까지의 합:".format(inputN, sumN))
# sn = a1 * (1- r^n) / (1-r)
sumN = inputN1 * (1 - (inputR ** inputN)) / (1-inputR)
print("{}번째 항까지의 합:{}".format(inputN, int(sumN)))
등차수열
# 수열: 규칙성을 가지고 나열된 수들
# 2씩증가하는 숫자의 열을 가지고 나열하는 수들
# an = 2n (n은 차수) {an} 으로 표기함
# an = 2n+1
# 특정항은 특정항까지의 합에서 특정항 이전의 항까지의 합과 같다
# 등차수열 : 연속된 두 항의 차이가 일정한 수열
# 등차수열 규칙성을 이용해서 일반항을 구할 수 있다.
# 등차수열 공식 : an = a1 + (n-1) * d
# 등차수열 합 : sn = n(a1 +an) / 2
inputN1 = int(input("a1입력"))
inputD = int(input("공차 입력"))
inputN = int(input("n 입력"))
valueN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN
print("{}번째 항의 값: {}".format(n, valueN))
n += 1
continue
valueN += inputN
print("{}번째 항의 값:{}".format(n, valueN))
n += 1
print("{} 번째 항의 값: {}".format(inputN, valueN))
# 등차수열 공식으로 출력하는 프로그램(일반화 공식)
valueN = inputN1 + (inputN-1) * inputD
print(valueN)
# n번째 항까지의 합을 출력하는 프로그램
inputN1 = int(input("a1입력"))
inputD = int(input("공차 입력"))
inputN = int(input("n 입력"))
valueN = 0
sumN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN
sumN = valueN
print("{}번째 항의 값: {}".format(n, sumN))
n += 1
continue
valueN += inputD
sumN += valueN
print("{}번째 항의 값:{}".format(n, sumN))
n += 1
print("{} 번째 항의 값: {}".format(inputN, sumN))
#
valueN = inputN1 + (inputN-1) * inputD
sumN = inputN * (inputN1 + valueN) / 2
print(sumN)
소인수와 소인수분해
# 소인수: 수를 곱으로 나타낼때 소수와 인수를 합쳐서 소인수라고 함 약수 중에서 소수를 소인수라고 함
# 12의 소인수 : 2 ,3
# 25의 소인수 : 5
# 36의 소인수 : 2, 3
# 41의 소인수 : 41
# 소인수분해 : 1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 함
# 20의 소인수분해 : 2^2 * 5
# 36의 소인수분해 : 2^2 * 3^2
# 25의 소인수분해 : 5^2
# 41의 소인수분해 : 41
# 실습 : 약수를 구해보자
# 14 = (1, 2, 7, 14)
# 154 = (1, 2, 7, 11, 114, 22, 77, 154)
# 1547 = (1, 7, 13, 17, 91, 119 ,221, 1547)
inputNumber = int(input("1보다 큰 정수 입력: "))
# 입력된 값의 소인수 찾는 코드
n = 2
while n <= inputNumber:
if inputNumber % n == 0:
print("소인수 {}".format(n))
inputNumber /= n
else:
n += 1
# 72에 x를 곱하면 y의 제곱이 된다고 할 때, x 에 해당하는 가장 작은 정수를 구하는 코드
n = 2
searchNumbers = []
while n <= inputNumber:
if inputNumber % n == 0:
print("소인수 {}".format(n))
if searchNumbers.count(n) == 0:
searchNumbers.append(n)
elif searchNumbers.count(n) == 1:
searchNumbers.remove(n)
inputNumber /= n
else:
n += 1
print(searchNumbers)
순열
# 순열 코드
numN = int(input("numN 입력:"))
numR = int(input("numR 입력:"))
result = 1
for n in range(numN, (numN-numR), -1):
print("n : {}".format(n))
result = result *n
print("result: {}".format(result))
# 원 순열 4명의 친구가 원탁 테이블에 앉을 수 있는 순서를 계산해보자
n = int(input("친구 수 입력"))
result = 1
for i in range(1, n):
result *= i
print("result: {}".format(result))
시그마
# 시그마란? 수열의합을 합을 타나내는 기호이다.
# 1부터 n항까지 합을 구할때 사용
# sn = n(a1 + an) / 2
inputN1 = int(input("a1 입력: "))
inputD = int(input("공차 입력: "))
inputN = int(input("n 입력: "))
valueN = 0
sumN = 0
valueN = inputN1 + (inputN -1) * inputD
sumN = inputN * (inputN1 + valueN) / 2
print(sumN)
# sn = a1 * (1 - r^n) / (1 - r)
inputN1 = int(input("a1 입력: "))
inputR = int(input("공비 입력: "))
inputN = int(input("n 입력: "))
sumN = inputN1 * (1- inputR**inputN) / (1-inputR)
약수와 소수
# 약수 : 어떤 수를 나누어 덜어지게 하는 수
# 소수 : 1과 그 수 자신만을 약수로 가지는 수
# 실습
# q1 1부터 30까지 숫자 중 5로 나눈 몫과 나머지가 모두 소수인 숫자는?
# -> 먼저 몫이 소수인 숫자는 2, 3, 5
# -> 5에 몫을 곱함 --> 10, 15, 25
# -> 나머지가 소수이면 5보다 작은 소수는 2, 3이 있음 이것을 각각 더하면
# -> 12, 13, 17, 18, 27, 28
# q2 1부터 30까지 숫사 중 소수 는?
# -> 2를 제거한 2의 배수 제거
# -> 3을 제거한 3의 배수 제거
# -> 5를 제거한 5의 배수 제거
# -> 7을 제거한 7의 배수 제거
# -> 11을 제거한 11의 배수 제거
# -> 13을 제거한 13의 배수 제거
# -> 17 제거
# -> 19 제거
# -> 23 제거
# -> 29 제거
user = int(input("0보다 큰 정수 입력:"))
# 약수 코드
for number in range(1, user+1):
if user % number == 0:
print("{}의 약수".format(number))
# 소수 코드
for number in range(2, user +1):
flag = True
for n in range(2, number):
if number % n == 0:
flag = False
break
if flag:
print("{} : 소수!!".format(number))
else:
print("{} : 합성수!".format(number))
조합
numN = int(input("numN 입력:"))
numR = int(input("numR 입력:"))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, (numN-numR), -1):
print(n)
resultP *= n
print("resultP: {}".format(resultP))
for n in range(numN, 0, -1):
print(n)
resultR *= resultR
print("resultR : {}".format(resultR))
resultC = int(resultP /resultR)
print(resultC)
# 카드 5장 중 2장을 선택했을때 삼각형과 사각형이 동시에 선택될 확률?
진법
# 진법 : 생활에서 사용하는 10진법 외에 프로그램에서 사용하는 다양한 진법에 대해서 살펴보자
# 2진법 : 0, 1
# 8진법 : 0 ~ 7 8개사용
# 10진법 : 0~9 10개 사용
# 16진법 : 0~F 까지 16개 사용
# 10진수 -> 2진수, 8진수, 16진수
# binary : bin() "2진수"
# octal : oct() "8진수"
# hexadcimal : hex() "16진수"
dNum = 30
print(f"2진수 : {format(dNum,"#b")}")
print(f"2진수 : {bin(dNum)}")
print(f"8진수 : {oct(dNum)}")
print(f"16진수 : {hex(dNum)}")
print(f"2진수 : {type(bin(dNum))}")
print(f"8진수 : {type(oct(dNum))}")
print(f"16진수 : {type(hex(dNum))}")
print(f"2진수 : {format(dNum,"#b")}")
print(f"8진수 : {format(dNum,"#o")}")
print(f"16진수 : {format(dNum,"#x")}")
print("{0:#b},{0:#o},{0:#x}".format(dNum))
# x진수 -> 10진수
print("2진수(0b11110) -> 10진수({})".format(int("0b11110",2)))
print("8진수(0b11110) -> 10진수({})".format(int("0o36",8)))
print("16진수(0b11110) -> 10진수({})".format(int("0x1e",16)))
최대공약수
# 최대공약수 : 공통된 약수중에 가장 큰 수
# 12의 약수, 20의 약수의 공약수 1, 2, 4
# 공약수중 가장 큰 공약수를 최대공약수라고 함 즉 , 4
# 소인수 분해를 통해 최대공약수 및 공약수를 구할 수 있음
# 실습
# 12, 54, 72 ->최대공약수 및 공약수 6 (1,2,3,6) -> 소인수분해 이용
# 25, 115, 255 -> 최대공약수 및 공약수 5 (1,5) -> 소인수분해 이용
# 빵 112개와 우유 80개를 학생들한테 남김없이 동일하게 나눠주려고 할때최대 몇명의 학생이 가질수있는지?
# -> 112와 80의 최대공약수를 구함! 16명 학생 한명망 빵7개랑 우유 5개를 받음
# 두 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드
num1 = int(input("1보다 큰 정수 입력:")) # 1번이 가장 작은수여야 한다는 가정
num2 = int(input("1보다 큰 정수 입력:"))
max_num = 0
for i in range(1, num1 +1):
if num1 % i == 0 and num2 % i == 0:
print("공약수: {}".format(i))
max_num = i
print("최대공약수 : {}".format(max_num))
# 세 개의 수를 입력하면 공약수와 최대공약수를 출력하는 코드
num1 = int(input("1보다 큰 정수 입력:")) # 1번이 가장 작은수여야 한다는 가정
num2 = int(input("1보다 큰 정수 입력:"))
num3 = int(input("1보다 큰 정수 입력:"))
max_num = 0
for i in range(1, num1 +1):
if num1 % i == 0 and num2 % i == 0 and num3 % i==0:
print("공약수: {}".format(i))
max_num = i
print("최대공약수 : {}".format(max_num))
# 유클리드 호제법
# x, y 최대공약수는 y, r(x%y)의 최대공약수와 같다
num1 = int(input("1보다 큰 정수 입력:")) # 1번이 가장 작은수여야 한다는 가정
num2 = int(input("1보다 큰 정수 입력:"))
temp1 = num1
temp2 = num2
while temp2 >0:
temp = temp2
temp2 = temp1 % temp2
temp1 = temp
print(temp)
최소공배수
# 두개 이상의 수에서 공통된 배수를 공배수라고 함
# 공배수 중 가장 작은 수를 최소공배수라고 한다.
# 12 , 21 ,33 의 최소공배수 924
# 12, 36, 48 최소공배수 144
# 2, 5, 8 중 하나만 제외하고 나머지 두 개의 수는 5를 곱하여도 최소공배수에 변함이 없다.
# 5를 곱하였을 때 최소 공배수에 변함이 있는 수를 찾아보자
# 2,5, 8 의 최소공배수 -> 40
# 10, 5, 8 의 최소공배수 -> 40
# 2, 25, 8 의 최소공배수 -> 200
# 2, 5, 40의 최소공배수 -> 40
# 2개의 수의 최소공배수
num1 = int(input("1보다 큰 정수 입력:")) # 1번이 가장 작은수여야 한다는 가정
num2 = int(input("1보다 큰 정수 입력:"))
max_num = 0
for i in range(1, num1 +1):
if num1 % i == 0 and num2 % i == 0:
print("공약수: {}".format(i))
max_num = i
print("최대공약수 : {}".format(max_num))
min_num = (num1 * num2) // max_num
print("최소공배수 : {}".format(min_num))
# 3개의 수의 최소공배수
num1 = int(input("1보다 큰 정수 입력:")) # 1번이 가장 작은수여야 한다는 가정
num2 = int(input("1보다 큰 정수 입력:"))
num3 = int(input("1보다 큰 정수 입력:"))
max_num = 0
for i in range(1, num1 +1):
if num1 % i == 0 and num2 % i == 0:
print("공약수: {}".format(i))
max_num = i
print("최대공약수 : {}".format(max_num))
min_num = (num1 * num2) // max_num
print("최소공배수 : {}".format(min_num))
new_num = min_num
for i in range(1, new_num + 1):
if new_num % i == 0 and num3 % i ==0:
max_num = i
min_num = (new_num * num3) // max_num
print("최대공배수: {}".format())
# 섬마을에 과일, 생선, 야채가 들어온다
# 과일 선박 : 3일주기
# 생선 선박 : 4일 주기
# 야채 선박 : 5일 주기
ship1 = 3 ; ship2 = 4 ; ship3 = 5
maxday = 0
for i in range(1, ship1+1):
if ship1 % i == 0 and ship2 % i == 0:
maxday = i
print("최대공약수 : {}".format(maxday))
minday = (ship1 * ship2) // maxday
print(f"{ship1}, {ship2}의 최소공배수: {minday}")
newday = minday
for i in range(1, newday+1):
if newday % i == 0 and ship3 % i == 0:
maxday = i
print("최대공약수 : {}".format(maxday))
minday = (newday * ship3) // maxday
print(f"{ship1}, {ship2}, {ship3}의 최소공배수: {minday}")
num1 = int(input('1보다 큰 정수 입력: '))
num2 = int(input('1보다 큰 정수 입력: '))
maxNum = 0
for i in range(1, num1 + 1):
if num1 % i == 0 and num2 % i == 0:
print('공약수: {}'.format(i))
maxNum = i
print('최대공약수 : {}'.format(maxNum))
minNum = (num1 * num2) // maxNum
print('최소공배수: {}'.format(minNum))
팩토리얼
# 0! = 1 = 1
# 1! = 1 = 1
# 2! = 1 x 2
# 3! = 1 x 2 x 3
inputN = int(input("n 입력:"))
# 반복문 이용 for문
result = 1
for n in range(1, inputN +1):
result *= n
print(f"{inputN} 팩토리얼 : {result}")
# 반복문 이용 while문
result = 1
n = 1
while n <=inputN:
result *= n
n += 1
print(f"{inputN} 팩토리얼 : {result}")
# 재귀함수를 이용하는 경우
def facotorailFun(n):
if n == 1: return 1
return n * facotorailFun(n-1)
피보나치수열
# 피보나치 수열 : 세 번째 항은 두번째 항과 첫 번째 항을 더한 합이다.
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
valuePreN2 = valueN
valuePreN1 = valueN
sumN += valueN
n += 1
else:
valueN = valuePreN2 + valuePreN1
valuePreN2 = valuePreN1
valuePreN1 = valueN
sumN += valueN
n += 1
print("{}번째 항의 값: {}".format(inputN, valueN))
print("{}번째 항의까지의 합 값: {}".format(inputN, sumN))
확률
# 박스에 "꽝"이 적힌 종이가 4개 있고, "선물"이 적힌 종이가 3장 있을 때, 파이썬을 이용해서 "꽝" 2장과 "선물" 1장을
# 구하는 확률을 구하는 코드
numN = int(input("numN:"))
numR = int(input("numR:"))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN,(numN - numR),-1):
resultP *= n
print(resultP)
for n in range(numR,0,-1):
resultR *= n
resultC = int(resultP/resultR)
# 함수로 구현
def profun():
numN = int(input("numN:"))
numR = int(input("numR:"))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN,(numN - numR),-1):
resultP = resultP * n
for n in range(numR,0,-1):
resultR = resultR * n
resultC = int(resultP/resultR)
return resultC
smaple = profun()
print(f"smaple.:{smaple}")
event1 = profun()
print(f"smaple.:{event1}")
event2 = profun()
print(f"smaple.:{event2}")
prob = (event1 * event2) / smaple
print(f"prob : {round(prob * 100,2)}%")
'파이썬 이것저것 > 코테준비' 카테고리의 다른 글
[파이썬] 프로그래머스 커뮤러닝 2주차 N으로 표현 (0) | 2022.07.24 |
---|---|
[파이썬] 프로그래머스 커뮤러닝 2주차 더 맵게 (0) | 2022.07.24 |
[파이썬] 프로그래머스 커뮤러닝 1주차 큰 수 만들기 (0) | 2022.06.06 |
[파이썬] 프로그래머스 커뮤러닝 1주차 가장 큰 수 (0) | 2022.06.06 |
[파이썬] 프로그래머스 커뮤러닝 1주차 체육복 (0) | 2022.06.06 |