Data Structure and Algorithm: Difference between revisions

From Innovation
Jump to: navigation, search
Line 90: Line 90:


=== Schedule ===
=== Schedule ===
{|class="wikitable"
==== Part I - Basic Data Structures ====
{|class="wikitable"
! 주차
! 주차
! 주제
! 주제
Line 97: Line 97:
! 수업 내용
! 수업 내용
! 숙제
! 숙제
! 비고
! 읽어오기
|-
|-
| 1 || 자료구조 및 알고리즘 과목 소개 <br>배열, 포인터, 자료구조 || 컴퓨터프로그래밍기초 복습 || 수업 소개<br>배열의 문법<br>배열과 포인터의 관계<br>포인터 연산자의 종류와 활용<br>구조체: 사용자 정의 타입 || malloc()을 이용한 메모리 할당 방법과 간단한 예제 프로그램 따라하여 원리 파악하기 ||
| 1 || 자료구조 및 알고리즘 과목 소개 <br>배열, 포인터, 자료구조 || 컴퓨터프로그래밍기초 복습 || 수업 소개<br>배열의 문법<br>배열과 포인터의 관계<br>포인터 연산자의 종류와 활용<br>구조체: 사용자 정의 타입 || malloc()을 이용한 메모리 할당 방법과 간단한 예제 프로그램 따라하여 원리 파악하기 ||
Line 110: Line 110:
|-
|-
| 6 || 중간고사 I || 시험 공부 || 수요일 13:00-15:00<br> 강의실 추후 공지<br>시험 범위: 배열, 포인터, 자료구조, 링크드리스트, 스택, 큐, 트리 관련 배운 모든 토픽 || ||
| 6 || 중간고사 I || 시험 공부 || 수요일 13:00-15:00<br> 강의실 추후 공지<br>시험 범위: 배열, 포인터, 자료구조, 링크드리스트, 스택, 큐, 트리 관련 배운 모든 토픽 || ||
|}
|}
 
 
==== Part II - Widely used Data Structures ====
{|class="wikitable"
! 주차
! 주제
! 수업 전 할 일
! 수업 내용
! 숙제
! 읽어오기
|-
|}
 
 
 
==== Part III - Fundamental Algorithms ====
{|class="wikitable"
! 주차
! 주제
! 수업 전 할 일
! 수업 내용
! 숙제
! 읽어오기
|-
|}


=== 공부하는 방법에 대하여 ===
=== 공부하는 방법에 대하여 ===
# 나는 프로그래머다, "까치네, 깨비메일 개발자 특집" (E27 [https://iamprogrammer.io/2016/05/08/episode-27-%EA%B9%8C%EC%B9%98%EB%84%A4-%EA%B9%A8%EB%B9%84%EB%A9%94%EC%9D%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%8A%B9%EC%A7%91-1%EB%B6%80-%ED%99%8D%EC%BD%A9-%EA%B3%BC%EA%B8%B0%EB%8C%80-%EA%B9%80/ 1부 E27 link], [https://iamprogrammer.io/2016/05/23/episode-27-%EA%B9%8C%EC%B9%98%EB%84%A4-%EA%B9%A8%EB%B9%84%EB%A9%94%EC%9D%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%8A%B9%EC%A7%91-2%EB%B6%80-%ED%99%8D%EC%BD%A9-%EA%B3%BC%EA%B8%B0%EB%8C%80/comment-page-1/ 2부 E28 link])
# 나는 프로그래머다, "까치네, 깨비메일 개발자 특집" (E27 [https://iamprogrammer.io/2016/05/08/episode-27-%EA%B9%8C%EC%B9%98%EB%84%A4-%EA%B9%A8%EB%B9%84%EB%A9%94%EC%9D%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%8A%B9%EC%A7%91-1%EB%B6%80-%ED%99%8D%EC%BD%A9-%EA%B3%BC%EA%B8%B0%EB%8C%80-%EA%B9%80/ 1부 E27 link], [https://iamprogrammer.io/2016/05/23/episode-27-%EA%B9%8C%EC%B9%98%EB%84%A4-%EA%B9%A8%EB%B9%84%EB%A9%94%EC%9D%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90-%ED%8A%B9%EC%A7%91-2%EB%B6%80-%ED%99%8D%EC%BD%A9-%EA%B3%BC%EA%B8%B0%EB%8C%80/comment-page-1/ 2부 E28 link])

Revision as of 18:47, 12 February 2018

Text Book

교재

주교재

두 교재는 비슷한 수준으로 설명이 되어 있어서 어느 책을 써도 상관없다. 뇌를 자극하는 알고리즘은 자료구조와 알고리즘이 같이 소개되어 있고 열혈 자료구조는 자료구조에 충실하다.

  1. [한국어] "뇌를 자극하는 알고리즘," 박상현 저, 한빛미디어
    • 온라인 교재 관련 커뮤티티, 오탈자 등 정보공유 go
    • 예제 소스 및 책 소개 페이지 go
  2. [한국어] "윤성우의 열혈 자료구조 - C언어를 이용한 자료구조 학습서," 윤성우, 오렌지미디어 go
    • 책 구매자에게 1년 온라인 무료 강의 제공
    • 발표자료 go

곁에 두고 익히면 좋은 책

  1. [번역서] "다양한 예제로 학습하는 데이터 구조와 알고리즘 : 문제 해결법부터 개선법까지 (Data Structures and Algorithms Made Easy)," 나라심하 카루만치 저, 전계도 , 전형일 역, 인사이트 go
    • 소프트웨어 기술 직종 면접 준비에도 쓸 수 있을 만큼 다양한 예제를 포함.
  2. [번역서] "사전처럼 바로 찾아 쓰는 알고리즘 - 바로 동작하는 실전 코드로 정리한 알고리즘 사전,"조지 T. 하인만, 게리 폴리케, 스탠리 셀코 저, 전경원 역, 한빛미디어 go
    • 조금 더 깊이 있게 공부하고 싶다면 추천하는 책
  3. [한국어] "C 언어로 쉽게 풀어쓴 자료 구조," 천인국 저, 생능출판사 go
    • 부록으로 자료 구조의 개념을 이해할 수 있는 플래시 애니메이션 수록

개념 익히기 좋은 책

  1. [번역서] "Hello Coding 그림으로 개념을 이해하는 알고리즘 (Grokking Algorithms)," 아디트야 바르가바 저, 김도형 역, 한빛미디어 go
    • 개념 이해하기 아주 좋은 쉬운 책, 그림이 재미있음

Topics

  1. Backgrounds
    • Array
    • Pointer
    • Memory allocation
    • Data structure
    • Recursion
    • Time complexity of algorithms
  2. Data Structure
    • Stack
    • Queue
    • Linked List
    • Binary Tree
  3. Algorithms
    • Sorting
    • Searching
    • Hash Table
    • Graph


Syllabus (T.B.D.)

  1. 배열 vs 포인터
    • 개념
    • 크기 정하기
    • 메모리 할당
    • 포인터 연산자의 이해
    • 포인터 이해 연습문제
  2. 자료구조
    • 사전 학습: 자료구조란 무엇인가. 왜 써야하는가. 어디에 쓰일까. 친구와 토론하고 결론을 한 페이지로 정리해서 오기
    • 개념 이해
    • 포인터 연산자 추가
  3. 복잡도
    • 사전학습:
    • 표기법
    • 숙제:
  4. 링크드 리스트
    • 사전학습: 링크드 리스트란 무엇인가. 실 생활에 링크드리스트로 표현 가능 것들은 무엇일까. 링크드리스트로 표현 가능한 것을 배열로 표현할 수 없을까. 배열 대신 링크드리스트를 써야하는 상황과 이유는 무엇일까. 친구와 토론하고 내용을 1페이지로 정리하기
    • 개념잡기
    • 리스트에서 특정 값 탐색
    • 앞 중간 끝 삽입 삭제 동작
  5. 스택
    • 사전 학습: 스택이란 무엇인가. 실생활에 스택의 사용 실제 사례. 링크드 리스트로 스택 구현한다면. 배열로 스택 구현한다면. 어떤 경우에 배열을 쓰고 링크드리스트로 쓸까. 토론하고 내용을 1페이지로 정리하기
    • 개념 잡기
    • 자료구조: 배열 vs 포인터
    • 크기 정하기: 스태틱 vs 다이나믹
    • 입력과 삭제 동작
    • 숙제: 계산기 만들기
    • 사전학습: 큐는 무엇인가. 실 생활에 사용 예제는. 스택 두개로 큐를 구현하기. 토론하고 내용을 1페이지로 정리하기
    • 개념잡기
    • 자료구조
    • 입력과 삭제 동작
    • 숙제:
  6. 바이너리 트리
    • 사전학습: 바이너리 트리의 개념 잡기. 정렬이 되어 있는 자료(예: 사전)에서 자료를 찾는 방법과 바이너리 트리를 사용한 방법을 비교해보기. 바이너리 트리로 표현 가능한 것들이 무엇이 있을까.
    • 바이너리 트리 개념 잡기
    • 용어 정리
    • 자료구조: 배열과 포인터
    • 특정 값 찾기
    • 리프노드 삽입과 삭제
    • 중간 노드 삽입과 삭제
    • 루트 노드 삽입과 삭제
    • 숙제:


Schedule

Part I - Basic Data Structures

주차 주제 수업 전 할 일 수업 내용 숙제 읽어오기
1 자료구조 및 알고리즘 과목 소개
배열, 포인터, 자료구조
컴퓨터프로그래밍기초 복습 수업 소개
배열의 문법
배열과 포인터의 관계
포인터 연산자의 종류와 활용
구조체: 사용자 정의 타입
malloc()을 이용한 메모리 할당 방법과 간단한 예제 프로그램 따라하여 원리 파악하기
2 링크드 리스트 1. 링크드 리스트를 정의하고 실생활에 링크드리스트로 표현 가능 것들은 조사.
2. 위에서 찾은 것을 다른 방식으로 표현하는 방법은 무엇이고 어떤 것이 더 효율 적인가?
3. 친구와 토론하고 내용을 1페이지로 정리하여 제출
퀴즈: 배열, 포인터, 구조체, malloc
수업 전 활동 평가
개념 잡기
리스트의 주요 연산: 탐색, 삭제, 삽입,
리스트의 장단점: 어떤 경우에 배열이나 링크드 리스트를 써야 할까?
더블링크드 리스트와 환형 더블 링크드 리스트
링크드 리스트를 이용하여 다항식의 덧셈, 뺄셈과 곱셉 프로그램 작성하기 [뇌자알] 1장[열혈] 3, 4, 5장
3 스택 1.장스택을 정의하고 실생활에서 스택이 쓰이는 사례
2. 링크드 리스트와 배열로 스택을 구현한다면 어떻게 해야 할까?
3. 친구와 토론하고 내용을 1 페이지로 정리하여 제출
퀴즈: 링크드 리스트의 주요 연산
수업 전 활동 평가
개념 잡기
스택의 기본 연산: 배열 vs 링크드 리스트
사칙 연산의 표기법: 전위, 중위 후위 표기법
스택을 이용한 계산기
후위표기법을 중위 표기법으로 변환하는 프로그램 작성하기 [뇌자알] 2장
[열혈] 6장
4 1. 큐를 정의하고 실생활에서 큐가 쓰이는 사례
2. 스택 2개로 큐를 구현하는 방법은?
3. 친구와 토론하고 내용을 1페이지로 정리하여 제출
퀴즈: 스택의 주요 연산
수업 전 활동 평가
개념 잡기
큐의 기본 연산: 배열 vs 링크드 리스트
큐를 이용하여 LRU 기법 구현하기 [뇌자알] 3장
[열혈] 7장
5 트리 1. 바이너리 트리를 정의하고 사전에서 단어를 찾는 방법과 바이너리 트리로 단어를 찾는 방법을 비교해보기
2. 언제 바이너리 트리가 사용되고 이것으로 표현 가능한 것은?
3. 친구와 토론하고 내용을 1페이지로 정리하여 제출
퀴즈: 큐의 주요 연산
수업 전 활동 평가
개념 잡기
용어 정리
트리의 기본 연산
트리의 표현 방법
순회 방법: 전위, 중위, 후위
허프만 코드 구현하기 [뇌자알] 4장
[열혈] 8장
6 중간고사 I 시험 공부 수요일 13:00-15:00
강의실 추후 공지
시험 범위: 배열, 포인터, 자료구조, 링크드리스트, 스택, 큐, 트리 관련 배운 모든 토픽


Part II - Widely used Data Structures

주차 주제 수업 전 할 일 수업 내용 숙제 읽어오기


Part III - Fundamental Algorithms

주차 주제 수업 전 할 일 수업 내용 숙제 읽어오기

공부하는 방법에 대하여

  1. 나는 프로그래머다, "까치네, 깨비메일 개발자 특집" (E27 1부 E27 link, 2부 E28 link)