소개#

알고리즘#

컴퓨터 공학/과학의 기본 핵심은 문제해결을 위한 컴퓨터 활용이다. 따라서 주어진 문제를 해결하는 다양한 문제해결 알고리즘을 공부하고 활용할 수 있어야 한다. 여기서 알고리즘은 주어진 문제의 모든 사례에 대해 동일하게 작동하는 단계별 명령의 목록, 쉽게 말해 컴퓨터 프로그램을 의미한다. 문제를 해결하는 알고리즘이 존재할 경우 계산 가능하다computable 라고 말한다.

문제 하나에 대해 다양한 알고리즘이 존재할 수 있다. 그리고 특정 알고리즘을 실행할 때 적절한 시간 내에 실행이 멈추지 않거나 메모리를 너무 많이 사용해서 프로그램이 제대로 실행하지 않을 수도 있다. 그런 알고리즘은 복잡도가 높은 특성을 갖고 있기 때문인데 어떤 면에서 복잡도가 좊은지 알아내는 일이 해결책을 찾는 일만큼 중요하다. 즉, 다양한 알고리즘을 비교, 분석하여 가장 좋은 알고리즘을 선택하는 능력 또한 매우 중요하다. 이를 위해 다양한 문제를 해결하는 알고리즘과 주어진 알고리즘 복잡도를 분석하는 기법을 학습해야 한다.

반면에 컴퓨터로 해결이 불가능한 문제, 즉 계산이 불가능한 문제도 존재하며, 이에 대한 연구도 중요하다. 하지만 계산 불가능성은 여기서는 다루기에는 너무 어려운 주제이기에 자세히는 다루지 않는다.

파이썬 프로그래밍언어#

알고리즘의 구현은 파이썬 프로그래밍언어를 사용한다. 파이썬은 객체지향 프로그래밍(OOP) 언어이며 중요한 기본 자료형(자료 구조)들을 제공한다. 또한 객체지향 언어로써 파이썬은 클래스class를 이용하여 자료 구조를 정의하는 방식을 지원한다.

많은 객체지향 프로그래밍언어들 중에서 파이썬을 사용하는 이유는 파이썬이 알고리즘을 가장 자연스럽게 표현해주는 언어 중에 하나이기 때문이다.

프로그래밍 환경#

파이썬 프로그래밍은 아무런 설치과정 없이 주피터 노트북을 이용하여 바로 실습할 수 있는 온라인 프로그래밍 환경인 구글 코랩을 추천합니다. 구글 코랩과 주피터 노트북 사용법은 아래 동영상을 참조하세요.

전제 사항#

코드 이해를 위해 파이썬 프로그래밍에 대한 기초 지식이 요구된다. 아래 강의노트를 활용할 것을 추천한다.