프로그래밍은 작은 원리를 적용하는 방법을 익히고 연습을 통해 익숙해져야 함.
최소 10줄의 코드를 작성해 간단한 문제를 스스로 만들 수 있는 기초 역량을 쌓은 뒤에 자료구조 & 알고리즘을 공부하는 것이 좋다. 프로그래밍을 시작하는 단계에서는 어떻게든 코드가 굴러가도록 만든 다음, 속도가 너무 느리다든지의 문제를 인지한 뒤 코드 최적화를 위해 자료구조와 알고리즘 적용이 필요한 경우 배운다면 더욱 이해가 잘 될 것이다.
프로그래머스, 생활코딩 등의 사이트 혹은 서적이나 인강 등으로 파이썬 기초 문법을 익히고 기초 문제를 풀어보는 것이 좋다.
현실 세계의 가장 대표적인 데이터 구조는 사전, 우편번호, 학생부 등이 있다. 예를 들어 5자리의 우편번호 중 앞3자리는 시/군/구/자치구, 뒤2자리는 일련번호로 하여 국가의 기초구역을 제공하는 것이다. 학생부는 한 각 학생별 학년과 반, 번호를 부여해 관리한다.
선형(linear) 자료구조 : 배열, 연결리스트, 스택, 큐
비선형(non-linear) 자료구조 : 트리, 그래프
일상 속 알고리즘 예시
- 백종원 레시피
- 직장인의 출근 전 아침 루틴
어떤 자료구조와 알고리즘을 사용하느냐에 따라 프로그래밍의 성능이 아주 크게 차이날 수 있다. 따라서 자료구조와 알고리즘을 공부하는 것은 프로그래밍을 잘 하기 위해서 기술과 역량을 익히는 것이다.
그런데 어떤 알고리즘이 "좋은" 알고리즘일까?
그 판단의 기준은 시간 복잡도이다.
시간복잡도란 프로그램이 실행되는 단위를 기준으로 하는 것을 말한다.
그러니까 1분, 1초 같은 시간 단위로 실행 시간을 측정하는 것이 아니라
프로그램 실행 후 완료까지 걸리는 단계의 수를 기준으로 알고리즘을 판단하는 것이다.
컴퓨터 하드웨어마다 차이가 있어 실행 시간을 기준으로 한다면 정확한 판단을 할 수 없어
알고리즘의 훌륭함 정도는 얼마나 단계가 적느냐에 따라 결정된다.
안녕하세요. 시간복잡도에서 프로그램 실행 후 완료까지 걸리는 단계의 수를 측정할 수 있는 표기법이 있을까요?