/
170425.py
171 lines (127 loc) · 4 KB
/
170425.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 25 09:56:16 2017
@author: stu
"""
#재귀알고리즘 복습
def gcd(num1,num2):
if num2==0:
return num1
else:
gcd(num2,num1%num2)
return num1
def fact(num):
if num==0:
return 1
else:
return num*fact(num-1)
fact(10)
#표준편차를 구하기 위한 함수
import math
def stddev(*args):
def mean():
return sum(args)/len(args)
def variance(m):
total = 0
for arg in args:
total += (arg-m)**2
return total/(len(args)-1)
v=variance(mean())
return math.sqrt(v)
print(stddev(2.3,1.7,1.4,0.7,1.9))
#클래스로 전환
class Stddev(object):
def __init__(self,*args):
self.*args = *args
def mean():
return sum(args)/len(args)
def variance(m):
total =0
for arg in args:
total += (arg-m)**2
return total/(len(args)-1)
def result():
v=variance(mean())
return math.sqrt(v)
#문제1. 가변 매개변수 이용하여 최대 공약수를 출력하는 중첩 함수를 생성하시오.
def gcd(*args):
def gcd_2(a):
b=gcd_3(max(a),min(a))
a.remove(min(a))
a.remove(max(a))
a.append(b)
if max(a)==min(a):
a[0]
else:
gcd_2(a)
def gcd_3(a,b):
if min(a,b) == 0:
return max(a,b)
return gcd_3(b,a%b)
a = []
for i in args:
a.append(i)
gcd_2(a)
return a[0]
print(gcd(25,10))
gcd(40,20,30,40)
#문제2. 탐욕 알고리즘을 이용하여 지불해야 하는 금액을 가장 적은 수의 화폐로 지불하시오.(1원 50원 100원 / 362)
def greedy(num):
cash=[100,50,1]
j=[]
for i in cash:
res = divmod(num,i)
num = res[1]
j.append(res[0])
return j
print(greedy(400))
#문제3. 위 알고리즘을 재귀 알고리즘을 사용하여.
import math
def greedy(num):
if num>=100:
global p
p=[]
j=math.trunc(num/100)
p.append(j)
num=num % 100
return greedy(num)
elif num>=50:
j=math.trunc(num/50)
p.append(j)
num=num % 50
return greedy(num)
elif num<50:
p.append(int(num/1))
num==0
return p
print(greedy(362))
#다른방법
def coinGreedy(money, cash_type):
def coinGreedyRecursive(money, cash_type, res, idx):
if idx >= len(cash_type): #화폐 다 사용 시 종료
return res
dvmd = divmod(money,cash_type[idx])
res[cash_type[idx]]=dvmd[0]
return coinGreedyRecursive(dvmd[1],cash_type,res,idx+1)
cash_type.sort(reverse=True) # 화폐 내림차순 정렬
return coinGreedyRecursive(money,cash_type,{},0)
money = int(input('액수입력 : '))
cash_type = [int(x) for x in input('화폐단위를 입력하세요 : ').split(' ')]
res = coinGreedy(money,cash_type)
for key in res:
print('{0}원 : {1}개'.format(key,res[key]))
#예제. 모듈 생성 예
print(divide(2,3))
#문제4. 오전에 만들었던 최대공약수 구하는 함수를 모듈화 하시오
import gcd
print(gcd.gcd(10,20,30,40))
#문제5. 표준편차를 출력하는 함수를 모듈화시켜 다른 실행창에서 아래와 같이 실행하면 실행되게 하시오.
import std
print(std.stddev(2.3,1.7,1.4,0.7,1.9))
#예제. sys 모듈
import sys
print(sys.builtin_module_names)
import sys
for path in sys.path:
print(path)
#문제6. sys 모듈의 random 함수를 이용하여 원주율 구하는 코드를 실행해보시오.