최댓값 찾기 최댓값을 찾는 알고리즘 상당히 간단한 알고리즘이다. (하나하나 비교하면 됨) 하나씩 비교를 하다보니 시간복잡도는 O(n)이 된다. 코드 본 글에서는 unittest를 이용하여 알고리즘을 풀이합니다. 로직이 달라지는것은 아닙니다. 사실 파이썬에는 max() 라는 내장함수를 제공해주는데, max([5, 3, 2]) 안에 숫자로 구성된 리스트를 넣어주면 알아서 최댓값을 반환해준다. # -*- coding: utf-8 -*- import unittest class Exam02(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.items = [10, 92, 4, 7, 44, 80, 98, 50, 74, 32] ...생략... def ..
수 많은 알고리즘이 존재하지만, 어떤 알고리즘이 성능이 좋은지 평가하는 확실한 방법은 무엇일까? 방법은 수학적으로 증명하는 방법이다. 빅오(O) 표기법 빅오 표기법은 알고리즘의 성능 평가 방법 중 가장 많이 사용하는 방법 중 하나다. 가장 많이 사용하는 이유는 최악의 성능을 측정할 수 있기 때문이다. (최악의 성능을 알 수 있다면, 적어도 이 정도의 성능은 보장한다는 뜻이므로) 빅오 표기법 이외에도 오메가 표기법(Omega Notation), 세타 표기법(Theta Notation) 이 있지만, 본 글에서는 빅오 표기법에 대해서만 논한다. 알고리즘 분석하기 분석하기 전, 가정 3가지 헤더 파일은 알고리즘의 성능에 영향을 주지 않는다. 함수 진입, 함수 반환은 알고리즘 성능에 영향을 주지 않는다. 프로그램..
본 글은 Python3.7 환경에서 진행합니다. unittest 로 작성되어 있지만, 알고리즘을 확인하는데는 문제가 없습니다. 단순히 더하는 방법 결론부터 이야기 하자면 이 방법은 비효율적이다. 1 부터 10 까지 더하는 알고리즘을 작성하면 아래와 같이 생각할 수 있다. 코드 test_sum 함수를 보자. # -*- coding: utf-8 -*- import unittest class Exam01(unittest.TestCase): def test_sum(self): """1 부터 n 까지 더하는 알고리즘""" answer = 0 # 정답 for _ in range(1, 11): answer += _ # 1 부터 10까지 더한다. self.assertEqual(answer, 55) if __name__..