자료구조와 알고리즘이란
자료구조란
대량의 데이터를 효율적으로 관리할 수 있는 데이터 구조를 의미한다.
코드상에서 효율적으로 데이터를 처리하기 위해, 데이터 특성에 따라, 체계적으로 데이터를 구조화해야 한다.
어떤 데이터 구조를 사용하느냐에 따라 코드 효율이 달라짐
효율적으로 데이터를 관리하는 예
- 우편번호: 5자리 우편번호로 국가의 기초구역을 제공
- 5자리 우편번호에서 앞 3자리는 시, 군, 자치구를 표기, 뒤 2자리는 일련번호로 구성
- 학생 관리: 학년, 반, 번호를 학생에게 부여해서, 학생부를 관리
- XX학년, X반, X번 학생
- 만약 위 관리 기법이 없다면… 3000명 학생 중 특정 학생을 찾기 위해, 전체 학생부를 모두 훑어봐야 한다.
대표적인 자료구조
- 배열, 스택, 큐, 링크드리스트, 해쉬 테이블, 힙 등
현실 세계에 가장 대표적인 데이터 구조? 사전
알고리즘이란?
- 어떤 문제를 위한 절차/방법
- 어떤 문제에 대해, 특정한 ‘입력’을 넣으면, 원하는 ‘출력’을 얻을 수 있도록 만드는 프로그래밍을 말한다.
현실 세계에서 가장 대표적인 알고리즘? 백종원 레시피
자료구조와 알고리즘이 중요한 이유
- 어떤 자료구조와 알고리즘을 쓰느냐에 따라, 성능이 천지차이이다.
결국 프로그래밍을 잘 할 수 있는 기술과 역량을 익히고, 검증할 수 있다.
자료구조/알고리즘, 그리고 파이썬
- 어떤 언어로든 자료구조/알고리즘 익힐 수 있음
- 이전에는 무조건 C 또는 C++로만 작성하도록 하는 경우가 많았다.
- 최근에는 언어로 인한 제약/평가는 없어짐
- 가장 쉽고 빠르게 자료구조/알고리즘을 익힐 수 있는 언어: 파이썬
파이썬, 주피터 노트북 설치
프로그램 설치: anaconda 설치
- anaconda란?
- 파이썬 기본(컴파일러)
- 파이썬 주요 라이브러리
- jupyter notebook 등 유용한 툴
- 참고
- 컴파일러: 프로그래밍 언어로 작성된 코드를 컴퓨터가 실행할 수 있는 코드로 변환하는 프로그램
- 파이썬의 장점: 라이브러리
- pip install library-name
jupyter notebook이란?
- Editor(PyCharm) vs jupyter notebook
- 한줄 한줄 코드 실행 결과 확인이 쉽다.
- 문서와 코드를 함께 작성/저장할 수 있다.
복잡한 자료구조/알고리즘을 보다 쉽게 정리하고, 익히기 위해 사용한다.
배열
꼭 알아둬야 할 자료구조: 배열(Array)
- 데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조
- 파이썬에서는 리스트 타입이 배열 기능을 제공하고 있음
배열이 왜 필요할까?
- 같은 종류의 데이터를 효율적으로 관리하기 위해 사용
같은 종류의 데이터를 순차적으로 저장
- 배열의 장점
- 빠른 접근 가능
- 배열의 단점
- 추가/삭제가 쉽지 않음
- 미리 최대 길이를 지정해야 함
파이썬과 C 언어의 배열 예제
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main(int argc, char *argv[])
{
char county[3] = "US";
printf("%c%c\n", country[0], country[1]);
printf("%s\n", country);
return 0;
}
파이썬
1
2
3
4
5
country = 'US'
print(country) // US
country = country + 'A'
print(country) // USA
파이썬과 배열
- 파이썬 리스트 활용
1
2
3
4
5
6
7
8
9
# 1차원 배열: 리스트로 구현 시
data = [1, 2, 3, 4, 5]
print(data)
# 2차원 배열: 리스트로 구현 시
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data
print(data[0])
print(data[0][0])
다음 dataset에서 전체 이름 안에 M이 몇번 나왔는지 빈도수 출력
1
2
3
4
5
6
m_count = 0;
for data in dataset
for index in range(len(data))
if data[index] == 'M':
m_count += 1
print(m_count)
앞으로 일주일에 한 번씩 하는지 안하는지 확인하는 제도를 만들 것인데 언제부터 스터디를 다시 시작하실건지, 계속 하실 건지 안 하실 건지 의견을 보여주셨으면 합니당!
- 매일 업무 정리해놓기
- 회사사람들 이름 외우기
코드 분석