최대값
자료구조에서 가장 큰 값을 찾는다.
class MaxAlgorithm:
def __init__(self, ns):
# ns: 주어진 숫자 배열
self.nums = ns # 주어진 숫자 배열을 인스턴스 변수 nums에 저장ㅇㅇ
self.maxNum = 0 # 최대값을 저장할 변수를 초기화
def getMaxNum(self):
self.maxNum = self.nums[0] # maxNum을 배열의 첫 번째 요소로 초기화
# 배열을 순회하면서 최대값을 찾음
for n in self.nums:
if self.maxNum < n: # 현재 maxNum보다 큰 수를 발견하면
self.maxNum = n # maxNum을 해당 수로 업데이트
return self.maxNum # 최대값 반환
# MaxAlgorithm 클래스의 인스턴스를 생성하고 주어진 배열을 전달
ma = MaxAlgorithm([-2, -4, 5, 7, 10, 0, 8, 20, -11])
# getMaxNum 메서드를 호출하여 최대값을 구하고 이를 출력
maxNum = ma.getMaxNum()
print(maxNum)
실습
리스트에서 아스키코드가 가장 큰 값을 찾는 알고리즘
class maxAlgorithm:
def __init__(self, cs):
self.chars = cs
self.maxChar = 0
def getMaxChar(self):
self.maxChar = self.chars[0] # 가장 처음에 있는 문자를 현재까지 가장 큰 문자라고 가정하고 시작
for c in self.chars:
if ord(self.maxChar) < ord(c): # ord = 아스키 코드 숫자로 바꾸는거
self.maxChar = c
return self.maxChar
chars =['c','x','q','a','e','P','p']
mc = maxAlgorithm(chars)
maxChar = mc.getMaxChar()
print(f'maxChar : {maxChar}')
최솟값
최대값 반대로~
class minAlgorithm:
def __init__(self,ns):
self.nums = ns
self.minNum = 0
def getMinNum(self):
self.minNum = self.nums[0]
for n in self.nums:
if self.minNum > n:
self.minNum = n
return self.minNum
ma = minAlgorithm([-2,-4,5,7,10,0,8,20,-11])
minNum = ma.getMinNum()
print(minNum)
최빈값
빈도수가 가장 높은 데이터 찾기

풀이과정
1이면 indexes리스트에 index가 1인 곳에 넣고 3이면 index가 3인곳에 넣는식으로 쌓아가고 가장 큰 값 -> 최빈값
class MaxAlgorithm:
def __init__(self, ns):
self.nums = ns
self.maxNum = 0
self.maxNumIdx = 0
# 최댓값과 그 인덱스를 설정하는 메서드
def setMaxIdxAndNum(self):
self.maxNum = self.nums[0]
self.maxNumIdx = 0
# for문으로 최댓값과 그 위치 찾기
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]
# MaxAlgorithm 클래스의 인스턴스 생성 및 메서드 호출
maxAlg = MaxAlgorithm(nums)
maxAlg.setMaxIdxAndNum()
maxNum = maxAlg.getMaxNum()
print(f'maxNum: {maxNum}') # 최댓값 출력
# 최빈값 찾기 위한 준비: 주어진 숫자들의 빈도수를 저장할 배열 생성
indexes = [0 for i in range(maxNum + 1)] # 최댓값 + 1 크기의 배열 초기화
for n in nums:
indexes[n] += 1 # 각 숫자의 등장 횟수 카운트
# 최빈값 찾기: 빈도수 배열을 MaxAlgorithm 클래스에 적용
maxAlg = MaxAlgorithm(indexes)
maxAlg.setMaxIdxAndNum()
maxNum = maxAlg.getMaxNum() # 최빈값의 빈도수
maxNumIdx = maxAlg.getMaxNumIdx() # 최빈값
print(f'maxNum: {maxNum}') # 최빈값의 빈도수 출력
print(f'maxNumIdx: {maxNumIdx}') # 최빈값 출력
print(f'즉, {maxNumIdx}의 빈도수가 {maxNum}으로 가장 높다.')
근삿값
가장 가까운 값을 찾자

풀이과정
for문을 이용해서 돌면서 가장 작은 차이 찾기
enumerate 사용한거
import random
nums = random.sample(range(0, 50), 20)
print(f'nums : {nums}')
inputNum = int(input('input number : '))
print(f'inputNum : {inputNum}')
nearNum = 0 # 가장 가까운 숫자 초기화
nearNumIdx = -1 # 가장 가까운 숫자의 인덱스 초기화
minDiff = 50 # 최소 차이 초기화 (가장 큰 차이로 시작)
# for문 돌면서 가장 입력값과 가까운 숫자 찾기
for idx, n in enumerate(nums):
absDiff = abs(n - inputNum) # 절대값을 사용하여 차이 계산
if absDiff < minDiff:
minDiff = absDiff # 최소 차이
nearNum = n # 가장 가까운 숫자
nearNumIdx = idx # 가장 가까운 숫자의 인덱스
print(f'nearNum : {nearNum}, Index : {nearNumIdx}')
평균
평균 구하기
import random
nums = random.sample(range(0,100), 10)
print(f'nums: {nums}')
total = 0
for i in nums:
total += i
avg = total / len(nums)
print(f'avg : {avg}')
반응형
'IT > Python' 카테고리의 다른 글
Python - 알고리즘 (하노이 탑) (3) | 2024.02.28 |
---|---|
Python - 알고리즘 (버블정렬,삽입정렬,선택정렬) (1) | 2024.02.26 |
Python - 알고리즘 (순위) (0) | 2024.02.26 |
Python - 알고리즘 (선형검색,이진검색) (1) | 2024.02.26 |
Python - 자료구조 (0) | 2024.02.22 |