SlideShare a Scribd company logo
코딩테스트 합격자 되기 C++
04/05장 코딩테스트 문법
저자 박경록
목차
빌트인 데이터 타입
배열 / 문자열
STL
- 반복자
- 컨테이너
- 알고리즘
강의 영상
빌트인 데이터 타입(정의)
- 언어 자체에서 제공하는 변수 타입
- C++은 변수선언시 타입을 명시해야 함(정적캐스팅)
- 정수형, 부동소수형, 논리형, 문자형, 배열형 등이 있음
변수형(필수
변수이름(필수)
초기값(생략 가능)
빌트인 데이터 타입(변수의 크기)
- 타입에 따라 변수 크기가 달라짐
- sizeof 연산자로 확인 가능
sizeof에 타입 혹은 변수명
빌트인 데이터 타입(배열의 정의)
- 동일한 타입의 변수를 묶어서 사용하는 자료구조
- 임의 접근을 통해 특정 위치 원소에 빠르게 접근 가능
배열의 타입
배열의 이름
배열의 크기
2
0 1 2 3 4
a[2]
빌트인 데이터 타입(배열의 성능)
1 2 3 4
0 1 2 3 4
5 추가
한칸씩 뒤로 이동
1 2 3 4
0 1 2 3 4
5 추가
맨 앞에 삽입 O(N) 맨 뒤에 삽입 O(1)
문자열(정의)
- 문자의 집합
- C++에서는 문자열을 편리 하게 사용할 수 있는 여러가지 메서드를 제공함
string을 사용하기 위한 헤더파일
string 타입
문자열의 메서드
- 초기화
- replace(문자열 대체)
- + operator(문자열 추가)
- substr(부분 문자열)
- find(문자열 검색)
- length(문자열의 길이)
STL
- C++에서 제공하는 템플릿기반의 표준 라이브러리
- 코딩 테스트에서는 컨테이너, 알고리즘을 중점적으로 학습해야 함
- 반복자를 통해 모든 알고리즘/컨테이너를 동일한 방법으로 제어 가능
vector
set
map
unordered_map
unordered_set
count
sort
next_permutation
unique
binary_search
max_element
min_element
컨테이너 알고리즘
forward iterator
reverse iterator
반복자
STL(반복자)
- 특정 자료구조 / 알고리즘에 종속되지 않고 동일하게 순회가능
- 코딩테스트에서는 순방향 / 역방향 반복자를 알아둬야 함
- 순방향반복자의 시작은 begin() 끝은 end()
- 역방향반복자의 시작은 rbegin() 끝은 rend()
유효하지 않은 영역
STL(반복자의 실제 동작)
순방향 반복자 begin()
순방향 반복자 end()
역방향 반복자 rend()
역방향 반복자 rbegin()
vector list
타입은 다르나 접근
하는 문법 동일
STL(컨테이너)
- STL에서 제공하는 데이터를 저장하고 관리하는 저장소
- 각 컨테이너 메서드의 시간복잡도를 정리하는게 중요
- 비슷한 동작을 하나 시간복잡도가 다른 경우 정리 필요
- 각 알고리즘에 맞는 자료구조를 학습하는게 필요
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)
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)
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)
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)
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)
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)
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)
STL(알고리즘->count)
- 데이터를 세는 함수
- 특정 값의 출현 횟수를 반환
동작 예시코드 인자 설명 시간복잡도
특정 값의 출현 횟수 count(v.begin(),v.end(),value) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
찾고자 하는 값
O(N)
STL(알고리즘->sort)
- 데이터를 정렬하는 함수
- 정렬기준을 전달하지 않으면 오름차순으로 동작
- 사용자 정의형의경우 무조건 정렬기준을 전달 해야 함
동작 예시코드 인자 설명 시간복잡도
특정 범위를 오름차순으로 정렬 sort(v.begin(), v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
o(NlogN)
특정 범위를 사용자가 정의한
기준으로 정렬
sort(v.begin(), v.end(), compare) 정렬의 시작 반복자
정렬의 끝 반복자
정렬 기준
(실제 끝 반복자 바로 직전까지 정렬대상)
O(NlogN)
- a가 b보다 클 때 true
- 조건이 false일때 swap 발생
- 인접한 중복요소를 뒤로 재배치하는 함수
- 중복되지 않는 범위의 끝을 나타내는 반복자를 반환함
- 함수 사용후 중복요소가 제거된 것이 아님, 완전히 제거하려면 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)
- 정렬된 범위에서 특정 값을 찾는 함수
- 값이 존재하면 true를, 존재하지 않으면 false를 반환함
- 이진 탐색을 사용하므로 O(logN)보장
- 반드시 정렬된 상태에서 사용해야함
STL(알고리즘->binary_search)
동작 예시코드 인자 설명 시간복잡도
값 찾기 binary_search(v.begin(),v.end(),val
ue)
정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(logN)
- 범위내에서 가장 큰(또는 작은) 원소를 찾는 함수
- 반복자 범위에서 가장큰(또는 작은) 원소를 가리키는 반복자를 반환함.
- 선형 탐색을 사용하므로 O(N)
STL(알고리즘->max_element / min_element)
동작 예시코드 인자 설명 시간복잡도
최대값 찾기 max_element(v.begin(),v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N)
최소값 찾기 min_element(v.begin(),v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N)
- 주어진 범위의 요소들에 대해 다음 순열을 생성
- 순열이 더 이상 없으면 false, 그렇지 않으면 true
- 모든 순열을 생성하기 위해서는 정렬되어 있어야 함
- 시간 복잡도는 O(N*N!)
STL(알고리즘->next_permutation)
동작 예시코드 인자 설명 시간복잡도
다음순열 생성 next_permutation(v.begin(),v.end()) 정렬의 시작 반복자
정렬의 끝 반복자
(실제 끝 반복자 바로 직전까지 정렬대상)
O(N*N!)
커뮤니티 소개
- 오픈 카톡방
- 깃허브
- 디스코드
커뮤니티 소개(오픈카톡방) cont’d
- 저자 직접 운영
- 대략 400명 정도 인원이 자유롭게 소통
- 개인적인 주제 및 코딩 관련 소통 가능
커뮤니티 소개(오픈카톡방)
커뮤니티 소개(깃허브) cont’d
- 책 문제의 정답코드
- 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘
- C++ 기본 문법
- STL의 성능 비교
커뮤니티 소개(깃허브)
커뮤니티 소개(디스코드) cont’d
- 모각코 진행
- 공식 스터디 / 개인 스터디 모집 공고 및 진행
- 책 관련 문의 / 답변
커뮤니티 소개(디스코드)

More Related Content

Similar to 코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법

[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
Bill Kim
 
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
Jaewook Byun
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
Terry Cho
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
S.O.P.T - Shout Our Passion Together
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
승혁 조
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
Bill Kim
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
ultrasuperrok
 
Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
Kwangyoun Jung
 
데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList
Jaewook Byun
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
Bill Kim
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
중선 곽
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
hungrok
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
Circulus
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
Yong Joon Moon
 
자료구조 큐
자료구조 큐자료구조 큐
자료구조 큐
Choonghyun Yang
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, map
Nam Hyeonuk
 
Python 스터디
Python 스터디Python 스터디
Python 스터디
sanghyuck Na
 

Similar to 코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법 (20)

[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
데이터 분석 5 - Java Collection Framework - LinkedList 파헤치기
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
강의자료3
강의자료3강의자료3
강의자료3
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
 
Light Tutorial Python
Light Tutorial PythonLight Tutorial Python
Light Tutorial Python
 
데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList데이터 분석 3 - Java Collection Framework와 ArrayList
데이터 분석 3 - Java Collection Framework와 ArrayList
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
강의자료5
강의자료5강의자료5
강의자료5
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
자료구조 큐
자료구조 큐자료구조 큐
자료구조 큐
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, map
 
Python 스터디
Python 스터디Python 스터디
Python 스터디
 

More from ultrasuperrok

코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료  입니다.코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료  입니다.
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료  입니다.코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료  입니다.
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
코딩테스트 합격자 되기 C++ 08장 해시를 설명한   강의 자료 입니다.코딩테스트 합격자 되기 C++ 08장 해시를 설명한   강의 자료 입니다.
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
ultrasuperrok
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
ultrasuperrok
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀
ultrasuperrok
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
ultrasuperrok
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
ultrasuperrok
 

More from ultrasuperrok (12)

코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료  입니다.코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료  입니다.
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
 
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료  입니다.코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료  입니다.
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
 
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
코딩테스트 합격자 되기 C++ 08장 해시를 설명한   강의 자료 입니다.코딩테스트 합격자 되기 C++ 08장 해시를 설명한   강의 자료 입니다.
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
 
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
 
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
 
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
 
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
 
코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀
 
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
 

코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법

  • 1. 코딩테스트 합격자 되기 C++ 04/05장 코딩테스트 문법 저자 박경록
  • 2. 목차 빌트인 데이터 타입 배열 / 문자열 STL - 반복자 - 컨테이너 - 알고리즘
  • 4. 빌트인 데이터 타입(정의) - 언어 자체에서 제공하는 변수 타입 - C++은 변수선언시 타입을 명시해야 함(정적캐스팅) - 정수형, 부동소수형, 논리형, 문자형, 배열형 등이 있음 변수형(필수 변수이름(필수) 초기값(생략 가능)
  • 5. 빌트인 데이터 타입(변수의 크기) - 타입에 따라 변수 크기가 달라짐 - sizeof 연산자로 확인 가능 sizeof에 타입 혹은 변수명
  • 6. 빌트인 데이터 타입(배열의 정의) - 동일한 타입의 변수를 묶어서 사용하는 자료구조 - 임의 접근을 통해 특정 위치 원소에 빠르게 접근 가능 배열의 타입 배열의 이름 배열의 크기 2 0 1 2 3 4 a[2]
  • 7. 빌트인 데이터 타입(배열의 성능) 1 2 3 4 0 1 2 3 4 5 추가 한칸씩 뒤로 이동 1 2 3 4 0 1 2 3 4 5 추가 맨 앞에 삽입 O(N) 맨 뒤에 삽입 O(1)
  • 8. 문자열(정의) - 문자의 집합 - C++에서는 문자열을 편리 하게 사용할 수 있는 여러가지 메서드를 제공함 string을 사용하기 위한 헤더파일 string 타입
  • 9. 문자열의 메서드 - 초기화 - replace(문자열 대체) - + operator(문자열 추가) - substr(부분 문자열) - find(문자열 검색) - length(문자열의 길이)
  • 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!)
  • 27. 커뮤니티 소개 - 오픈 카톡방 - 깃허브 - 디스코드
  • 28. 커뮤니티 소개(오픈카톡방) cont’d - 저자 직접 운영 - 대략 400명 정도 인원이 자유롭게 소통 - 개인적인 주제 및 코딩 관련 소통 가능
  • 30. 커뮤니티 소개(깃허브) cont’d - 책 문제의 정답코드 - 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘 - C++ 기본 문법 - STL의 성능 비교
  • 32. 커뮤니티 소개(디스코드) cont’d - 모각코 진행 - 공식 스터디 / 개인 스터디 모집 공고 및 진행 - 책 관련 문의 / 답변