Python - 알고리즘 (최댓값,최솟값,최빈값,근삿값,평균)

2024. 2. 27. 16:40·IT/Python

최대값


자료구조에서 가장 큰 값을 찾는다.

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
'IT/Python' 카테고리의 다른 글
  • Python - 알고리즘 (하노이 탑)
  • Python - 알고리즘 (버블정렬,삽입정렬,선택정렬)
  • Python - 알고리즘 (순위)
  • Python - 알고리즘 (선형검색,이진검색)
생각 기록실
생각 기록실
AI(LLM)와 서비스 기획을 공부하며 작성하는 기술 블로그입니다. (feat. 영화리뷰를 곁들인..)
    반응형
  • 생각 기록실
    이러쿵 저러쿵
    생각 기록실
  • 전체
    오늘
    어제
  • 링크

    • Github
    • LindeIn
    • 분류 전체보기 (115)
      • 이러쿵 저러쿵 (5)
      • 정보통계 (7)
        • 데이터마이닝 (2)
        • 금융공학 (4)
      • IT (26)
        • Python (10)
        • AWS (5)
        • Github (2)
        • Project (8)
      • 리뷰 (29)
        • 영화 (22)
        • 책 (7)
      • 기타 (48)
  • hELLO· Designed By정상우.v4.10.3
생각 기록실
Python - 알고리즘 (최댓값,최솟값,최빈값,근삿값,평균)
상단으로

티스토리툴바