Posts 자료구조와 알고리즘이란
Post
Cancel

자료구조와 알고리즘이란

자료구조와 알고리즘이란

자료구조란

  • 대량의 데이터를 효율적으로 관리할 수 있는 데이터 구조를 의미한다.

  • 코드상에서 효율적으로 데이터를 처리하기 위해, 데이터 특성에 따라, 체계적으로 데이터를 구조화해야 한다.

    어떤 데이터 구조를 사용하느냐에 따라 코드 효율이 달라짐

효율적으로 데이터를 관리하는 예

  • 우편번호: 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)

앞으로 일주일에 한 번씩 하는지 안하는지 확인하는 제도를 만들 것인데 언제부터 스터디를 다시 시작하실건지, 계속 하실 건지 안 하실 건지 의견을 보여주셨으면 합니당!

  • 매일 업무 정리해놓기
  • 회사사람들 이름 외우기
  • 코드 분석

This post is licensed under CC BY 4.0 by the author.

개발자를 위한 소셜 네트워크 서비스: 뱃지 수집 시스템 구현하기

React 자습서 따라하기: #1 React 시작하기

Loading comments from Disqus ...