[zero-base/] DS Part 3. 알고리즘 - 18일차 스터디 노트

손윤재·2023년 12월 28일

제로베이스 DS 22기

목록 보기
19/55
post-thumbnail

❕ 최대값

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

  • 리스트의 첫번째 값을 최대값이라 가정하고 전체 데이터와 비교해 더 큰 값이 나올 때 마다 값 교환을 한다.

  <구현>


  class MaxAlgorithm:

      def __init__(self, ns):
          self.nums = ns
          self.maxNum = 0

      def getMaxNum(self):

          self.maxNum = self.nums[0]

		  ⭐ 최대값의 핵심
		  ───────────────────────────
          for n in self.nums:
              if self.maxNum < n:
                  self.maxNum = n
		  ───────────────────────────
          return self.maxNum


  ma = MaxAlgorithm([-2, -4, 5, 7, 10, 0, 8, 20, -11])
  maxNum = ma.getMaxNum()
  print(f'maxNum: {maxNum}') # maxNum: 20


❕ 최소값

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

  <구현>


  class MinAlgorithm:

      def __init__(self, ns):
          self.nums = ns
          self.minNum = 0

      def getMaxNum(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])
  maxNum = ma.getMinNum()
  print(f'maxNum: {minNum}') # minNum: -11


❕ 최빈값

데이터에서 빈도수가 가장 높은 값을 찾는다.

  • 새로운 딕셔너리 자료형을 선언해서 리스트의 요소를 Key로 하고 빈도수를 Value로 만들어 준다.

  <구현>


  nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17]
  print(nums)

  dic_idxs = {}
  for n in nums:
      if n not in dic_idxs: # 만약 dict 내에 해당 키가 없다면,
          dic_idxs[n] = 0 # key == n인 요소를 생성하고 0으로 초기화
      dic_idxs[n] += 1
  print(dic_idxs)

  # 빈도수에 해당하는 value 중 최대값을 찾는다.
  max_frqc = 0; mode = 0
  for key, val in dic_idxs.items():
      if max_frqc < val:
          max_frqc = val
          mode = key
  print(f'즉, {mode}의 빈도수가 {max_frqc}로 가장 높다.')

  # 실행결과
  #	[1, 3, 7, 6, 7, 7, 7, 12, 12, 17]
  #	{1: 1, 3: 1, 7: 4, 6: 1, 12: 2, 17: 1}
  #	즉, 7의 빈도수가 4로 가장 높다.


❕ 근사값

데이터 중 특정 값(참값)에 가장 가까운 값을 찾는다.

  • 데이터의 요소와 참값의 편차가 가장 작은 값을 찾는다.

  <구현>


  import random

  nums = random.sample(range(0, 50), 20)
  print(f'nums: {nums}')

  inputNum = int(input('input number: '))
  print(f'inputNum: {inputNum}')

  nearNum = 0
  minNum = nums[0]

  for n in nums:
      absNum = abs(n - inputNum)
      print(f'absNum: {absNum}')
      if absNum < minNum:
          minNum = absNum
          nearNum = n

  print(f'nearNum: {nearNum}')

  # 실행결과
  #	nums: [42, 39, 19, 38, 29, 49, 31, 43, 5, 8]
  #	inputNum: 7
  #   absNum: 35
  #   absNum: 32
  #   absNum: 12
  #   absNum: 31
  #   absNum: 22
  #   absNum: 42
  #   absNum: 24
  #   absNum: 36
  #   absNum: 2
  #   absNum: 1
  #	nearNum: 8

profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글