## 주제
자바로 배우는 자료구조
## 목표
자료구조의 특성 이해 및 코드 구현화 능력 증진
## 커리큘럼
1. 자료구조란?
2. 알고리즘 분석법
3. 배열
4. 연결 리스트
5. 스택
6. 큐
7. 트리
8. 그래프
9. 정렬
10. 검색
## 대상
+ 한 가지 이상의 프로그래밍 언어 경험자
## 시간 및 장소
+ 시간: 협의
+ 장소: 스터디룸, 카페 etc.
## 신청방법
+ 참가 신청 클릭
## 연락처
+ 이메일: sehongpark@cloudstudying.kr
+ 카톡: chaesam
# 자료 구조 시작하기
---
## 발표준비
1. **프로그래밍**(programming)이란?
2. **알고리즘**(algorithm)이란?
3. **자료구조**(datastructure)란?
4. **시간 복잡도**(time complexity)란?
5. **공간 복잡도**(time complexity)란?
## 실습하기
1. 이진수와 십육진수 (https://cloudstudying.kr/challenges/150)
2. 주사위 통계 (https://cloudstudying.kr/challenges/168)
3. 랜덤 넘버 갯수 (https://cloudstudying.kr/challenges/210)
4. 배열 숫자 검색 (https://cloudstudying.kr/challenges/209)
5. 평균 구하기 (https://cloudstudying.kr/challenges/211)
6. 행렬의 곱 (https://cloudstudying.kr/challenges/228)
## 확인하기
- 이진 문자열을 정수로 만들려면? (https://cloudstudying.kr/questions/247)
- 정수를 이진 문자열로 출력하려면? (https://cloudstudying.kr/questions/248)
- 임의의 정수를 만들려면? (https://cloudstudying.kr/questions/263)
## 피드백
- 추가로 궁금한 점?
- 아쉬운 점이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 자료 구조와 알고리즘
---
## 발표준비
1. **자료구조**와 **알고리즘**의 관계?
2. **좋은 알고리즘**의 기준?
3. 알고리즘 **분석법**?
4. 빅오 표기법과 **성장률**(Growth rate)이란?
## 실습하기
1. 시간 복잡도 분석 (https://cloudstudying.kr/challenges/152)
2. 수행 시간 측정 (https://cloudstudying.kr/challenges/157)
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연습문제 - 자료구조와 알고리즘
---
## 복습하기
- 프로그래밍, 알고리즘, 자료구조, 시간 복잡도, 공간 복잡도
- 좋은 알고리즘의 기준, 실험적 분석, 이론적 분석, 빅오 표기법, 성장률
## 연습문제
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 배열 리스트(array list)
---
## 발표준비
1. 배열 리스트란?
2. 배열 리스트의 장점?
3. 배열 리스트의 단점?
4. 배열 리스트의 명세(specification)는?
## 실습하기
1. 배열 리스트 사용하기 (https://cloudstudying.kr/challenges/227)
2. 심플 배열 리스트: 추가하기 (https://cloudstudying.kr/challenges/256)
3. 심플 배열 리스트: 삽입하기 (https://cloudstudying.kr/challenges/221)
4. 심플 배열 리스트: 삭제하기 (https://cloudstudying.kr/challenges/222)
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연결 리스트(linked list)
---
## 발표준비
1. 연결 리스트란?
2. 연결 리스트의 장점?
3. 연결 리스트의 단점?
4. 연결 리스트의 종류?
5. 연결 리스트의 명세는?
## 실습하기
1. 첫 위치에 요소 추가: `addFirst()` - https://cloudstudying.kr/challenges/247
2. 특정 위치에 요소 추가: `add(pos, data)` - https://cloudstudying.kr/challenges/248
3. 특정 위치 요소 삭제: `remove(pos)` - https://cloudstudying.kr/challenges/249
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연습문제 - 리스트(list)
---
## 복습하기
- 리스트, 배열 리스트, 배열 리스트의 장단점
- 연결 리스트, 연결 리스트의 장단점, 배열 리스트와 연결 리스트 비교
## 연습문제
1. 랜덤 요소 접근 시간 (https://cloudstudying.kr/challenges/301)
2. 첫 요소 삭제 시간 (https://cloudstudying.kr/challenges/307)
3. 랜덤 요소 삭제 시간 (https://cloudstudying.kr/challenges/308)
## 확인하기
1. 랜덤 요소 접근 시, 연결 리스트가 느린 이유는?
2. 첫 요소 삭제 시, 배열 리스트가 느린 이유는?
3. 랜덤 요소 삭제 시, 무엇이 더 빠를까?
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 스택
---
## 발표준비
1. **스택**이란?
2. 스택의 **장점**?
3. 스택의 **구조**?
3. 스택의 **활용 예**?
4. 스택의 **명세서**(specification)?
## 실습하기
1. 스택 `push()` 구현 (https://cloudstudying.kr/challenges/264)
2. 스택 `pop()` & `peek()` 구현 (https://cloudstudying.kr/challenges/265)
3. 문자열 역순 출력하기 (https://cloudstudying.kr/challenges/147)
4. 괄호 쌍 검사하기 (https://cloudstudying.kr/challenges/148)
5. 중휘식을 후위식으로 (https://cloudstudying.kr/challenges/149)
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 큐(queue)
---
## 발표준비
1. **큐**(queue)의 정의?
2. 큐의 **장점**?
3. 큐의 **구조**
4. 큐의 **사용 예**는?
5. 큐의 **명세서**는?
## 실습하기
1. 큐에 데이터 넣기 (https://cloudstudying.kr/challenges/267)
2. 큐에서 데이터 꺼내기 (https://cloudstudying.kr/challenges/269)
3. 원형 큐 만들기 (https://cloudstudying.kr/challenges/270)
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연습문제 - 스택과 큐
---
## 복습하기
## 연습문제
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 그래프(graph)
---
## 발표준비
## 실습하기
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연습문제 - 그래프
---
## 복습하기
## 연습문제
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 트리(tree)
---
## 발표준비
## 실습하기
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연습문제 - 트리
---
## 복습하기
## 연습문제
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 해시(hash)
---
## 발표준비
## 실습하기
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!
# 연습문제 - 해시
---
## 복습하기
## 연습문제
## 확인하기
## 피드백
- 추가로 궁금한점?
- 아쉬운 부분이 있다면?
- 어떻게 개선하면 좋을까?
- 좋았던 점 나누기!