다들 STL 잘 사용하고 계신가요?
오늘도 라태웅(NHN NEXT, NEXON)님의 발표입니다.
STL의 기본 개념부터, 사용 노하우까지 담아보았습니다.
여러분들도 우리 스터디 참여하셔서 Live로 들으시고 발표도 하러 오세요!
관련 문의 : 댓글 or https://www.facebook.com/gpgstudygogo
다들 STL 잘 사용하고 계신가요?
오늘도 라태웅(NHN NEXT, NEXON)님의 발표입니다.
STL의 기본 개념부터, 사용 노하우까지 담아보았습니다.
여러분들도 우리 스터디 참여하셔서 Live로 들으시고 발표도 하러 오세요!
관련 문의 : 댓글 or https://www.facebook.com/gpgstudygogo
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기Jaewook Byun
본 영상은 2021-2 KMOOC-데이터엔지니어링 강의의 원본이며, 강좌 오픈 이후에는 질의 응답 채널으로 이용 예정입니다. 각 Topic에 질문 해주시면 가능한 답은 달아드리도록 하겠습니다.
강의노트 (SlideShare) - https://www.slideshare.net/ssuser4a9113
코드 (GitHub) - https://github.com/JaewookByun/data_engineering
총 11강
구성
- ArrayList 연산
- MyArrayList - 배열 기반 List interface 구현
- LinkedList 연산
- MyLinkedList - 참조 기반 List & Queue interfaces 구현
- HashSet/HashMap 연산
- Lambda Expression
- Stream - Open JDK 15에서 이용가능한 거의 대부분의 연산을 다루려고 노력함
[소스 코드]
https://github.com/donghyundonghyun/Sorting
https://github.com/henlix/counting-sort
[설명]
대학생 연합 IT 벤처 창업 동아리 S.O.P.T (Shout Our Passion Together - http://sopt.org) 에서 내부적으로 진행하는 전공 과목 기초 스터디 자료입니다.
이번주에 배운 내용은 대학 서적에서 주로 다루는 정렬 (기본, 효율, 초효율) 에 대한 것입니다.
스터디 자료는 다음과 같은 순서대로 올라갈 예정입니다.
1. 데이터 구조 및 알고리즘
2. 운영체제
3. 네트워크
Light Tutorial Python
Studybee 2주차 스터디, 가볍게 보는 파이썬!!!
가볍게 파이썬에 대해서 공부하는 시간입니다~
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
데이터 분석 3 - Java Collection Framework와 ArrayListJaewook Byun
본 영상은 2021-2 KMOOC-데이터엔지니어링 강의의 원본이며, 강좌 오픈 이후에는 질의 응답 채널으로 이용 예정입니다. 각 Topic에 질문 해주시면 가능한 답은 달아드리도록 하겠습니다.
강의노트 (SlideShare) - https://www.slideshare.net/ssuser4a9113
코드 (GitHub) - https://github.com/JaewookByun/data_engineering
총 11강
구성
- ArrayList 연산
- MyArrayList - 배열 기반 List interface 구현
- LinkedList 연산
- MyLinkedList - 참조 기반 List & Queue interfaces 구현
- HashSet/HashMap 연산
- Lambda Expression
- Stream - Open JDK 15에서 이용가능한 거의 대부분의 연산을 다루려고 노력함
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기Jaewook Byun
본 영상은 2021-2 KMOOC-데이터엔지니어링 강의의 원본이며, 강좌 오픈 이후에는 질의 응답 채널으로 이용 예정입니다. 각 Topic에 질문 해주시면 가능한 답은 달아드리도록 하겠습니다.
강의노트 (SlideShare) - https://www.slideshare.net/ssuser4a9113
코드 (GitHub) - https://github.com/JaewookByun/data_engineering
총 11강
구성
- ArrayList 연산
- MyArrayList - 배열 기반 List interface 구현
- LinkedList 연산
- MyLinkedList - 참조 기반 List & Queue interfaces 구현
- HashSet/HashMap 연산
- Lambda Expression
- Stream - Open JDK 15에서 이용가능한 거의 대부분의 연산을 다루려고 노력함
[소스 코드]
https://github.com/donghyundonghyun/Sorting
https://github.com/henlix/counting-sort
[설명]
대학생 연합 IT 벤처 창업 동아리 S.O.P.T (Shout Our Passion Together - http://sopt.org) 에서 내부적으로 진행하는 전공 과목 기초 스터디 자료입니다.
이번주에 배운 내용은 대학 서적에서 주로 다루는 정렬 (기본, 효율, 초효율) 에 대한 것입니다.
스터디 자료는 다음과 같은 순서대로 올라갈 예정입니다.
1. 데이터 구조 및 알고리즘
2. 운영체제
3. 네트워크
Light Tutorial Python
Studybee 2주차 스터디, 가볍게 보는 파이썬!!!
가볍게 파이썬에 대해서 공부하는 시간입니다~
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
데이터 분석 3 - Java Collection Framework와 ArrayListJaewook Byun
본 영상은 2021-2 KMOOC-데이터엔지니어링 강의의 원본이며, 강좌 오픈 이후에는 질의 응답 채널으로 이용 예정입니다. 각 Topic에 질문 해주시면 가능한 답은 달아드리도록 하겠습니다.
강의노트 (SlideShare) - https://www.slideshare.net/ssuser4a9113
코드 (GitHub) - https://github.com/JaewookByun/data_engineering
총 11강
구성
- ArrayList 연산
- MyArrayList - 배열 기반 List interface 구현
- LinkedList 연산
- MyLinkedList - 참조 기반 List & Queue interfaces 구현
- HashSet/HashMap 연산
- Lambda Expression
- Stream - Open JDK 15에서 이용가능한 거의 대부분의 연산을 다루려고 노력함
오늘은 재귀에 대해 설명 드리겠습니다.
커리큘럼은 아래와 같습니다.
재귀의 정의
재귀의 예시 - 팩토리얼
재귀의 예시 - 하노이 탑
재귀를 사용할 때 조심해야 하는 경우
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
10. STL
- C++에서 제공하는 템플릿기반의 표준 라이브러리
- 코딩 테스트에서는 컨테이너, 알고리즘을 중점적으로 학습해야 함
- 반복자를 통해 모든 알고리즘/컨테이너를 동일한 방법으로 제어 가능
vector
set
map
unordered_map
unordered_set
count
sort
next_permutation
unique
binary_search
max_element
min_element
컨테이너 알고리즘
forward iterator
reverse iterator
반복자
11. STL(반복자)
- 특정 자료구조 / 알고리즘에 종속되지 않고 동일하게 순회가능
- 코딩테스트에서는 순방향 / 역방향 반복자를 알아둬야 함
- 순방향반복자의 시작은 begin() 끝은 end()
- 역방향반복자의 시작은 rbegin() 끝은 rend()
유효하지 않은 영역
12. STL(반복자의 실제 동작)
순방향 반복자 begin()
순방향 반복자 end()
역방향 반복자 rend()
역방향 반복자 rbegin()
vector list
타입은 다르나 접근
하는 문법 동일
13. STL(컨테이너)
- STL에서 제공하는 데이터를 저장하고 관리하는 저장소
- 각 컨테이너 메서드의 시간복잡도를 정리하는게 중요
- 비슷한 동작을 하나 시간복잡도가 다른 경우 정리 필요
- 각 알고리즘에 맞는 자료구조를 학습하는게 필요
14. STL(컨테이너->vector)
- 배열처럼 사용할수 있는 컨테이너(임의접근 가능)
- 원소의 수에 따라 내부 배열 크기가 자동으로 증가(신경쓰지 않아도 됨)
- 맨 앞 혹은 중간에 원소를 삽입하는 경우 비효율적임 O(N)
- 맨 뒤에 원소를 삽입하는 경우 효율적임 O(1)
메서드 동작 예시코드 인자 설명 시간복잡도
push_back 맨 끝에 원소 추가 vec.push_back(10) 추가할 원소 값 O(1)
pop_back 마지막 원소 제거 vec.pop_back() 없음 O(1)
insert 지정한 위치 원소 삽입 vec.insert(vec.begin()+2,5) 삽입할 위치 반복자, 삽입
할 값
O(N)
erase 지정한 위치 원소 제거 vec.erase(vec.begin()+1) 제거할 위치의 반복자 O(N)
15. STL(컨테이너->set)
- 중복을 허용하지 않는 순서가 없는 집합
- 원소가 자동으로 정렬됨(균형이진트리로 동작함)
- 삽입/삭제/탐색 : O(log N)
- 중복을 허용하지 않거나 / 원소를 삽입과 동시에 정렬해야 하는 경우 효율 적임
- 삽입/삭제 시 자동 정렬되므로 정렬이 필요하지 않은경우 비효율적임
메서드 동작 예시코드 인자 설명 시간복잡도
insert 원소 삽입 s.insert(5) 삽입할 값 O(log N)
erase 원소 삭제 s.erase(5) 삭제할 값의 반복자 O(log N)
find 원소 탐색 auto it = s.find(5) 찾을 값 O(log N)
16. STL(컨테이너->map)
- 키-값 쌍으로 이루어진 순서가 있는 집합
- 키는 중복을 허용하지 않음
- 원소가 자동으로 정렬됨(균형이진트리로 동작함)
- 삽입/삭제/탐색 : O(log N)
- 삽입 시 같은 키가 있으면 삽입X,값을 업데이트
- 삽입/삭제/탐색 시 자동 정렬되므로 정렬이 필요하지 않은경우 비효율적임
메서드 동작 예시코드 인자 설명 시간복잡도
insert 원소 삽입 m.insert({5, 10}) 삽입할 키-값 O(log N)
erase 원소 삭제 m.erase(5) 삭제할 키 O(log N)
find 원소 탐색 auto it = m.find(5) 찾을 키 O(log N)
17. STL(컨테이너->unordered_map)
- 키-값 쌍으로 이루어진 순서가 없는 집합
- 키는 중복을 허용하지 않음
- 원소가 해시 테이블로 관리 됨(자동정렬 되지 않음)
- 삽입/삭제/탐색 : 평균적으로 O(1), 최악 O(N)
- 삽입 시 같은 키가 있으면 삽입X,값을 업데이트
- 삽입/삭제/탐색 시 자동 정렬되지 않음, 해시 함수에 따라 원소 순서가 결정됨
메서드 동작 예시코드 인자 설명 시간복잡도
insert 원소 삽입 um.insert({5, 10}) 삽입할 키-값 평균 O(1), 최악 O(N)
erase 원소 삭제 um.erase(5) 삭제할 키 평균 O(1), 최악 O(N)
find 원소 탐색 auto it = um.find(5) 찾을 키 평균 O(1), 최악 O(N)
18. STL(컨테이너->unordered_set)
- 중복을 허용하지 않는 순서가 없는 집합
- 원소가 해시 테이블로 관리됨(자동 정렬 되지 않음)
- 삽입/삭제/탐색 : 평균적으로 O(1), 최악 O(N)
- 중복을 허용하지 않음
- 삽입/삭제/탐색 시 자동 정렬되지 않음, 해시 함수에 따라 원소 순서가 결정됨
메서드 동작 예시코드 인자 설명 시간복잡도
insert 원소 삽입 us.insert({5, 10}) 삽입할 키-값 평균 O(1), 최악 O(N)
erase 원소 삭제 us.erase(5) 삭제할 키 평균 O(1), 최악 O(N)
find 원소 탐색 auto it = us.find(5) 찾을 키 평균 O(1), 최악 O(N)
19. STL(컨테이너->stack)
- 중복을 허용하는 순서가 있는 선형 데이터 구조
- LIFO(Last In First Out), 최근에 들어온 원소가 먼저 삭제 됨
- 삽입/삭제 : O(1)
- 탐색 및 임의 접근 불가능
메서드 동작 예시코드 인자 설명 시간복잡도
push 원소 삽입 s.push(10) 삽입할 값 O(1)
pop 원소 삭제 s.pop() 없음 O(1)
top 맨 위 원소 확인 int val = s.top() 없음 O(1)
empty 스택이 비어있는지 확인 bool isEmpty = s.empty() 없음 O(1)
size 스택의 크기 확인 size_t size = s.size() 없음 O(1)
20. STL(컨테이너->queue)
- 중복을 허용하는 순서가 있는 선형 데이터 구조
- FIFO(First In First Out), 먼저 들어온 원소가 먼저 삭제 됨
- 삽입/삭제 : O(1)
- 탐색 및 임의 접근 불가능
메서드 동작 예시코드 인자 설명 시간복잡도
push 원소 삽입 q.push(10) 삽입할 값 O(1)
pop 원소 삭제 q.pop() 없음 O(1)
front 맨 앞 원소 확인 int val = q.front() 없음 O(1)
empty 큐가 비어있는지 확인 bool isEmpty = q.empty() 없음 O(1)
size 큐의 크기 확인 size_t size = q.size() 없음 O(1)
21. STL(알고리즘->count)
- 데이터를 세는 함수
- 특정 값의 출현 횟수를 반환
동작 예시코드 인자 설명 시간복잡도
특정 값의 출현 횟수 count(v.begin(),v.end(),value) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
찾고자 하는 값
O(N)
22. STL(알고리즘->sort)
- 데이터를 정렬하는 함수
- 정렬기준을 전달하지 않으면 오름차순으로 동작
- 사용자 정의형의경우 무조건 정렬기준을 전달 해야 함
동작 예시코드 인자 설명 시간복잡도
특정 범위를 오름차순으로 정렬 sort(v.begin(), v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
o(NlogN)
특정 범위를 사용자가 정의한
기준으로 정렬
sort(v.begin(), v.end(), compare) 정렬의 시작 반복자
정렬의 끝 반복자
정렬 기준
(실제 끝 반복자 바로 직전까지 정렬대상)
O(NlogN)
- a가 b보다 클 때 true
- 조건이 false일때 swap 발생
23. - 인접한 중복요소를 뒤로 재배치하는 함수
- 중복되지 않는 범위의 끝을 나타내는 반복자를 반환함
- 함수 사용후 중복요소가 제거된 것이 아님, 완전히 제거하려면 erase함수 추가사용
- 정렬된 상태에서 사용할 경우 모든 중복 요소를 제거할 수 있음
STL(알고리즘->unique)
동작 예시코드 인자 설명 시간복잡도
인접 중복 재배치 unique(v.begin(), v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N)
인접 중복 삭제 auto it = unique(v.begin(), v.end())
v.erase(it,v.end())
it은 unique에서 반환한 새로운 끝 반복자 O(N)
24. - 정렬된 범위에서 특정 값을 찾는 함수
- 값이 존재하면 true를, 존재하지 않으면 false를 반환함
- 이진 탐색을 사용하므로 O(logN)보장
- 반드시 정렬된 상태에서 사용해야함
STL(알고리즘->binary_search)
동작 예시코드 인자 설명 시간복잡도
값 찾기 binary_search(v.begin(),v.end(),val
ue)
정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(logN)
25. - 범위내에서 가장 큰(또는 작은) 원소를 찾는 함수
- 반복자 범위에서 가장큰(또는 작은) 원소를 가리키는 반복자를 반환함.
- 선형 탐색을 사용하므로 O(N)
STL(알고리즘->max_element / min_element)
동작 예시코드 인자 설명 시간복잡도
최대값 찾기 max_element(v.begin(),v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N)
최소값 찾기 min_element(v.begin(),v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N)
26. - 주어진 범위의 요소들에 대해 다음 순열을 생성
- 순열이 더 이상 없으면 false, 그렇지 않으면 true
- 모든 순열을 생성하기 위해서는 정렬되어 있어야 함
- 시간 복잡도는 O(N*N!)
STL(알고리즘->next_permutation)
동작 예시코드 인자 설명 시간복잡도
다음순열 생성 next_permutation(v.begin(),v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N*N!)