class MaxAlgorithm: def __init__(self, ns): self.nums = ns self.maxNum = 0 self.maxNumIdx = 0
def setMaxIndAndNum(self): self.maxNum = self.nums[0] self.maxNumIdx = 0 for i, n in enumerate(self.nums): if self.maxNum < n: self.maxNum = n self.maxNumIdx = i
def getMaxNum(self): return self.maxNum
def getMaxNumIdx(self): return self.maxNumIdx
nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17]
maxAlo = MaxAlgorithm(nums) maxAlo.setMaxIndAndNum() maxNum = maxAlo.getMaxNum() print('maxNum: {}'.format(maxNum))
indexes = [0 for i in range(maxNum + 1)] print('indexes: {}'.format(indexes)) print('indexes length: {}'.format(len(indexes)))
for n in nums: indexes[n] = indexes[n] + 1 print('indexes: {}'.format(indexes))
maxAlo = MaxAlgorithm(indexes) maxAlo.setMaxIndAndNum() maxNum = maxAlo.getMaxNum() maxNumIdx = maxAlo.getMaxNumIdx() print('maxNum: {}'.format(maxNum)) print('maxNumIdx: {}'.format(maxNumIdx))
print('즉, {}의 빈도수가 {}로 가장 높다.'.format(maxNumIdx, maxNum))
maxScore.py
class MaxAlgorithm: def __init__(self, ns): self.nums = ns self.maxNum = 0 self.maxNumIdx = 0
def setMaxNumIdxAndNum(self): self.maxNum = self.nums[0] self.maxNumIdx = 0
for i, n in enumerate(self.nums): if self.maxNum < n: self.maxNum = n self.maxNumIdx = i
def getMaxNum(self): return self.maxNum
def getMaxNumIdx(self): return self.maxNumIdx
modeEx.py
import random import maxScore as ms
scores = []
for i in range(100): rn = random.randint(71, 100) if rn != 100: rn = rn - (rn % 5) scores.append(rn)
print('scores: {}'.format(scores)) print('scores length: {}'.format(len(scores)))
# 최댓값 알고리즘 maxAlo = ms.MaxAlgorithm(scores) maxAlo.setMaxNumIdxAndNum() maxNum = maxAlo.getMaxNum() print('maxNum: {}'.format(maxNum))
# 인덱스 리스트 생성 indexes = [0 for i in range(maxNum + 1)] print('indexes: {}'.format(indexes)) print('indexes length: {}'.format(len(indexes)))
# 인덱스 리스트에 빈도 저장 for n in scores: indexes[n] = indexes[n] + 1 print('indexes: {}'.format(indexes))
n = 1 while True: maxAlo = ms.MaxAlgorithm(indexes) maxAlo.setMaxNumIdxAndNum() maxNum = maxAlo.getMaxNum() maxNumIdx = maxAlo.getMaxNumIdx()
if maxNum == 0: break print('{}. {}빈도수: {}\t'.format(n, maxNumIdx, maxNum), end='') print('+' * maxNum) indexes[maxNumIdx] = 0 n += 1
import random
nums = random.sample(range(0, 50), 20) print('nums: {}'.format(nums))
inputNum = int(input('input number: ')) print('inputNum: {}'.format(inputNum))
nearNum = 0 minNum = 50
for n in nums: absNum = abs(n - inputNum) # print('absNum: {}'.format(absNum))
if absNum < minNum: minNum = absNum nearNum = n
print('nearNum: {}'.format(nearNum))
near 모듈
def getNearNum(an): baseScores = [95, 85, 75, 65, 55] nearNum = 0 minNum = 100
for n in baseScores: absNum = abs(n - an) if absNum < minNum: minNum = absNum nearNum = n
if nearNum == 95: return 'A' elif nearNum == 85: return 'B' elif nearNum == 75: return 'C' elif nearNum == 65: return 'D' elif nearNum <= 55: return 'F'
nearEx.py
import near
scores = []
kor = int(input('input kor score: ')) scores.append(kor) eng = int(input('input eng score: ')) scores.append(eng) mat = int(input('input mat score: ')) scores.append(mat) sci = int(input('input sci score: ')) scores.append(sci) his = int(input('input his score: ')) scores.append(his)
# 총점 totalScore = sum(scores) print('totalScore: {}'.format(totalScore))
# 평균 avgScore = totalScore / len(scores) print('avgScore: {}'.format(avgScore))
# 등급 grade = near.getNearNum(avgScore) print('grade: {}'.format(grade))
가까운 값을 구하는 근삿값 부분의 실습 (시험 점수를 입력하면 학점이 출력되는 프로그램)이 가장 기억에 남고 이해하기 쉬웠다
최빈값이 이해가 가지 않았던 것은 아니지만 너무 복잡해서 중간에 에러도 뜨고, 이해하는데 오래 걸렸다
이해는 가지만 혼자 만들수 없을때 가장 불안한 것 같다
강의를 보고 이해하는것과 직접 코드를 만들수 있느냐 없느냐는 다르니까 서툴더라도 직접 만들어보고 뭐가 틀린지 확인해봐야겠다
내일은 알고리즘 나머지 부분을 공부할 예정이다