📌2/21 영상강의 6_019 ~ 6_030
특정 값에 가장 가까운 값
🖥️ 근삿값 알고리즘을 이용해 시험점수를 입력하면 학점이 출력되는 프로그램을 만들어보자
#모듈
def getNearNUm(an):
baScores = [95, 85, 75, 65, 55]
nearNum = 0
minNum = 100
for n in baScores:
absNum = abs(n - an)
if minNum > absNum:
minNum = absNum
nearNum = n
if nearNum == 95: # 위의 for문 연산의 결과값이 if문에 쓰이므로 들여쓰지 않는다.
return 'A'
elif nearNum == 85:
return 'B'
elif nearNum == 75:
return 'C'
elif nearNum == 65:
return 'D'
elif nearNum == 55:
return 'F'
#호출부
import near
scores = []
kor = int(input('국어 점수 입력 : '))
scores.append(kor)
eng = int(input('영어 점수 입력 : '))
scores.append(eng)
mat = int(input('수학 점수 입력 : '))
scores.append(mat)
sci = int(input('과학 점수 입력 : '))
scores.append(sci)
his = int(input('역사 점수 입력 : '))
scores.append(his)
totalScore = sum(scores)
print(f'totalScore:{totalScore}')
avgScores = totalScore / len(scores)
print(f'avgScores:{avgScores}')
gread = near.getNearNUm(avgScores)
print(f'gread:{gread}')
- minNum에 최댓값을 할당하여 if문을 시작하고 가장 작은 점수차이의 절대값(absNum)을 담아준다.
여러 수나 양의 중간값
🖥️점수표의 평균을 구하고 순위를 정하는 알고리즘을 만들어보자
#모듈
class Top5Players:
def __init__(self,cs,ns):
self.currentScore = cs
self.newScore = ns
def setAlignScore(self):
nearIdx = 0
nearScore = 0
minNum = 10.0
for idx, s in enumerate(self.currentScore):
absNum = abs(self.newScore - s)
if absNum < minNum:
minNum = absNum
nearIdx = idx
nearScore = s
if self.newScore >= self.currentScore[nearIdx]:
for i in range(len(self.currentScore)-1,nearIdx,-1):
self.currentScore[i] = self.currentScore[i -1]🔥
self.currentScore[nearIdx] = self.newScore
else:
for i in range(len(self.currentScore) -1, nearIdx+1, -1):
self.currentScore[i] = self.currentScore[i -1]
self.currentScore[nearIdx] = self.newScore
def getFinalTop5Scores(self):
return self.currentScore
#호출부
import near
scores = [8.9, 7.6, 8.2, 9.1, 8.8, 8.1, 7.9, 9.4, 7.2, 8.7]
top5PlayerScore = [9.12, 8.95, 8.12, 7.90, 7.88]
print(f'top5PlqyerScore:{top5PlayerScore}')
total = 0; avg = 0
for n in scores:
total += n
avg = round(total / len(scores),2)
print(f'total:{total}')
print(f'avg:{avg}')
tp = near.Top5Players(top5PlayerScore,avg)
tp.setAlignScore()
result = tp.getFinalTop5Scores()
print(f'result:{result}')
- self.currentScore[i] = self.currentScore[i -1]🔥
-> self.currentScore의 값들이 하나씩 뒤로 밀려야하는데 왜 인덱스값은 +1이 아니고 -1인지 이해가 잘 안된다.. for문의 방향성을 봐야하나
나 자신을 다시 호출하는 것을 재귀라고 한다.
자료 구조를 분할하고 각각의 분할된 자료구조를 정렬한 후 다시 병합하여 정렬한다
기준 값보다 작은 값과 큰 값으로 분리한 후 다시 합친다.
마무리
재귀 함수 가까워지기 넘 어려운것.. 내일 하노이 탑부터 다시 복습하기...
내일은 코딩테스트도 있고 팀 스터디도 있어서 시간을 좀좀따리 잘 나눠서 써야할 것 같다