SlideShare a Scribd company logo
1 of 25
코딩테스트 합격자 되기 C++
03장 시간복잡도
저자 박경록
목차
시간 복잡도
- 알고리즘이란?
- 알고리즘 성능측정법 및 시간 복잡도 개념
- 시간 복잡도를 빅오 표기법으로 표기하기
- 코딩 테스트에서 꼭 알아둬야 할 시간 복잡도
- 실전 예시
알고리즘이란?
“유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성
하기 위한 일반화된 작업을 정의”
- 정밀성 : 변하지 않는 명확한 작업 단계를 가져야 한다.
- 유일성 : 각 단계마다 명확한 다음 단계를 가져야 한다.
- 타당성 : 구현할 수 있고 실용적이어야 한다.
- 입력 : 정의된 입력을 받아들일 수 있어야 한다.
- 출력 : 답으로 출력을 내보낼 수 있어야 한다.
- 유한성 : 특정 수의 작업 이후에 정지해야 한다.
- 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 한다.
출저 : https://ko.wikipedia.org/wiki/알고리즘
알고리즘의 성능
알고리즘의 성능은 어떻게 측정할 것인가?
입력 출력
구현된 코드 동작
절대시간측정
연산횟수 측정
알고리즘의 성능은 어떻게 측정할 것인가?(절대시간측정)
출저 : chatGPT
동일한 코드를 수행할 때, 두 개의 PC에서
결과가 같게 나올까요?
PC에서 코드가 수행된 시간이 짧을수록 좋
은 성능이다라고 정의해봅시다.
알고리즘 성능 측정을 위해서는 환경에 제
약을 받지 않는 기준이 있어야 함
알고리즘의 성능은 어떻게 측정할 것인가?(연산횟수 측정 1)
- 코드가 동일하면 연산횟수는 모두 동일하므로 객관적 지표로 사용 가능
입력값이 N일때 연산횟수는
N^2 + 3N + 5로 정의할 수 있음
연산횟수는 환경 영향을 받지 않으나, 입력
값에 따라 달라질수 있으므로 기준 필요
특정 코드의 경우 연산횟수가 입력에 따라
변경될 수도 있는 이 경우는??
알고리즘의 성능은 어떻게 측정할 것인가?(연산횟수 측정 2)
- 입력값에 따른 연산횟수가 일정하지 않은 경우
연산횟수를 구하면…
N이 짝수일때는 N^2, N이 홀수일때는 N
코딩테스트 에서는 제한시간 내에 수행될
수 있는지 확인이 중요함
코테에서는 최악의 경우를 기준으로 연산횟
수를 정하는게 합리적으로 보임
알고리즘의 성능은 어떻게 측정할 것인가?(지금까지 내용 정리)
- 코딩테스트에서 알고리즘의 성능은 연산횟수로 측정
- 입력값에 따라 연산횟수가 상이하다면, 가장 최악의 경우를 기준으로 연산횟수를
측정
- 입력값에 따른 연산횟수를 측정해서 알고리즘의 성능을 지표로 나타내는 것을 시
간 복잡도 라고 함
뭐 더할게 남았나요? 시간복잡도까지 이해했는데
좀 더 생각해 봅시다.
- 코딩테스트에서 이렇게 정밀한 연산횟수를 매번 측정해야 하나요?
=> 점근적 표기법으로 표기
- 그래서 코딩테스트에 시간복잡도를 어떻게 활용해야 하나요?
=> 입력값을 기준으로 가용한 자료구조 및 알고리즘 고려 가능
점근적 표기법(정의를 알아보기 전..)
이전에 봤던 N^2 + 3N + 5의 각 항의 그래프를 따로 그려 봅시다.
N이 커질수록 격차가 커짐
N이 무한이라면?
=> 3N은 N^2에 비해 무시할 정도로 적은 값이 됨
=> 5는 3N에 비해 무시할 정도로 적은 값이 됨
=> N이 크게 되면 앞에 있는 3은 크게 의미가 없음
=> 특정 시점부터 3N은 5보다 항상 큼
=> 특정 시점부터 N^2은 3N보다 항상 큼
코딩테스트는 연산횟수 측정하는 시험 X
어느정도 복잡한지 대략적으로 알면 충분함
N^2 + 3N + 5 대신 N^2이라고 해도 무리 없음
점근적 표기법(정의)
- 정확한 연산횟수가 아닌, 연산횟수의 추이활용해 시간복잡도를 표기
- 이 때 최악의 경우를 고려해서 점근적 표기법으로 나타내는 것을 빅오표기라고 함
방법은 아래와 같이 아주 간단
1. 다항식에서 가장 많이 영향을 미치는 항을 남기고 제거
2. 마지막 남은 항의 계수를 제거
점근적 표기법(최고차항 구하고 빅오표기법으로 표기하기)
점근적 표기법(자주 보이는 복잡도 1)
1차원 배열탐색 O(N)
2차원 배열탐색 O(N*M)
점근적 표기법(자주 보이는 복잡도 2)
이진탐색트리에서 원소 탐색 O(log N)
아래와 같이 매번 탐색대상이 반절로 줄어드는 경우 O(logN)이 됨(머지정렬의 머지, 이진탐색 등….)
점근적 표기법(자주 보이는 복잡도 3)
동전 N개를 던졌을때 경우의수 = O(2^N)
ex)
동전 2개를 던졌을때 경우의수 = 2의 제곱
=> 앞앞
=> 앞뒤
=> 뒤앞
=> 뒤뒤
앞
뒤
앞앞
앞뒤
뒤앞
뒤뒤
점근적 표기법(코딩테스트에 활용하기)
1. 입력값의 크기를 통해 어느정도 시간복잡도 까지 허용되는지 추측 가능
=> 구현시 알고리즘/자료구조 선택을 명확히 할 수 있음
=> 본인이 구현한 코드가 시간초과 발생할 것인지 미리 파악 가능
=> 대략 초당 1,000 ~ 2,000만 정도 연산을 한다고 가정하면 됨
정확한 연산횟수는 중요하지 않습니다. 대
략적으로 파악하면 됩니다.
문제에서 요구하는 성능을 만족할 경우 모
두 정답처리가 되야 하므로 충분히 여유있
게 출제 됩니다.
점근적 표기법(메서드의 시간 복잡도 파악)
동일한 동작을 하는 것처럼 보이나, 시간복잡도가 다른 경우 존재
=> 기본 컨테이너 vs unordered 컨테이너
=> vector와 dictionary/set에서 특정 key 존재유무 확인
=> vector와 list에서 특정위치 원소 가져오기
- 동일한 코드처럼 보이나 코딩테스트 당락을 결정 할 수 있는 중요한 부분
- 직접 코드를 수행해서 확인하세요
점근적 표기법(실전 예시)
커뮤니티 소개
- 오픈 카톡방
- 깃허브
- 디스코드
커뮤니티 소개(오픈카톡방) cont’d
- 저자 직접 운영
- 대략 400명 정도 인원이 자유롭게 소통
- 개인적인 주제 및 코딩 관련 소통 가능
커뮤니티 소개(오픈카톡방)
커뮤니티 소개(깃허브) cont’d
- 책 문제의 정답코드
- 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘
- C++ 기본 문법
- STL의 성능 비교
커뮤니티 소개(깃허브)
커뮤니티 소개(디스코드) cont’d
- 모각코 진행
- 공식 스터디 / 개인 스터디 모집 공고 및 진행
- 책 관련 문의 / 답변
커뮤니티 소개(디스코드)

More Related Content

Similar to 코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다

점근적 복잡도 분석
점근적 복잡도 분석점근적 복잡도 분석
점근적 복잡도 분석
Young-jun Jeong
 

Similar to 코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다 (20)

시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 
TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션
 
점근적 복잡도 분석
점근적 복잡도 분석점근적 복잡도 분석
점근적 복잡도 분석
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
병렬 프로그래밍2
병렬 프로그래밍2병렬 프로그래밍2
병렬 프로그래밍2
 
[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
Coding interview
Coding interviewCoding interview
Coding interview
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 

More from ultrasuperrok

More from ultrasuperrok (6)

코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
 
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
 
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
 
코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 3주차 스터디 - 재귀
 
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
 
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
 

Recently uploaded

왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
Kyubok Cho
 

Recently uploaded (6)

현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
 
2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content
 
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
 
2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx
 
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
 
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
 

코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다

  • 1. 코딩테스트 합격자 되기 C++ 03장 시간복잡도 저자 박경록
  • 2. 목차 시간 복잡도 - 알고리즘이란? - 알고리즘 성능측정법 및 시간 복잡도 개념 - 시간 복잡도를 빅오 표기법으로 표기하기 - 코딩 테스트에서 꼭 알아둬야 할 시간 복잡도 - 실전 예시
  • 3. 알고리즘이란? “유한한 수의 규칙에 따라 구별 가능한 기호들을 조작하여 입력 정수에서 출력 정수를 생성 하기 위한 일반화된 작업을 정의” - 정밀성 : 변하지 않는 명확한 작업 단계를 가져야 한다. - 유일성 : 각 단계마다 명확한 다음 단계를 가져야 한다. - 타당성 : 구현할 수 있고 실용적이어야 한다. - 입력 : 정의된 입력을 받아들일 수 있어야 한다. - 출력 : 답으로 출력을 내보낼 수 있어야 한다. - 유한성 : 특정 수의 작업 이후에 정지해야 한다. - 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 한다. 출저 : https://ko.wikipedia.org/wiki/알고리즘 알고리즘의 성능
  • 4. 알고리즘의 성능은 어떻게 측정할 것인가? 입력 출력 구현된 코드 동작 절대시간측정 연산횟수 측정
  • 5. 알고리즘의 성능은 어떻게 측정할 것인가?(절대시간측정) 출저 : chatGPT 동일한 코드를 수행할 때, 두 개의 PC에서 결과가 같게 나올까요? PC에서 코드가 수행된 시간이 짧을수록 좋 은 성능이다라고 정의해봅시다. 알고리즘 성능 측정을 위해서는 환경에 제 약을 받지 않는 기준이 있어야 함
  • 6. 알고리즘의 성능은 어떻게 측정할 것인가?(연산횟수 측정 1) - 코드가 동일하면 연산횟수는 모두 동일하므로 객관적 지표로 사용 가능 입력값이 N일때 연산횟수는 N^2 + 3N + 5로 정의할 수 있음 연산횟수는 환경 영향을 받지 않으나, 입력 값에 따라 달라질수 있으므로 기준 필요 특정 코드의 경우 연산횟수가 입력에 따라 변경될 수도 있는 이 경우는??
  • 7. 알고리즘의 성능은 어떻게 측정할 것인가?(연산횟수 측정 2) - 입력값에 따른 연산횟수가 일정하지 않은 경우 연산횟수를 구하면… N이 짝수일때는 N^2, N이 홀수일때는 N 코딩테스트 에서는 제한시간 내에 수행될 수 있는지 확인이 중요함 코테에서는 최악의 경우를 기준으로 연산횟 수를 정하는게 합리적으로 보임
  • 8. 알고리즘의 성능은 어떻게 측정할 것인가?(지금까지 내용 정리) - 코딩테스트에서 알고리즘의 성능은 연산횟수로 측정 - 입력값에 따라 연산횟수가 상이하다면, 가장 최악의 경우를 기준으로 연산횟수를 측정 - 입력값에 따른 연산횟수를 측정해서 알고리즘의 성능을 지표로 나타내는 것을 시 간 복잡도 라고 함
  • 9. 뭐 더할게 남았나요? 시간복잡도까지 이해했는데 좀 더 생각해 봅시다. - 코딩테스트에서 이렇게 정밀한 연산횟수를 매번 측정해야 하나요? => 점근적 표기법으로 표기 - 그래서 코딩테스트에 시간복잡도를 어떻게 활용해야 하나요? => 입력값을 기준으로 가용한 자료구조 및 알고리즘 고려 가능
  • 10. 점근적 표기법(정의를 알아보기 전..) 이전에 봤던 N^2 + 3N + 5의 각 항의 그래프를 따로 그려 봅시다. N이 커질수록 격차가 커짐 N이 무한이라면? => 3N은 N^2에 비해 무시할 정도로 적은 값이 됨 => 5는 3N에 비해 무시할 정도로 적은 값이 됨 => N이 크게 되면 앞에 있는 3은 크게 의미가 없음 => 특정 시점부터 3N은 5보다 항상 큼 => 특정 시점부터 N^2은 3N보다 항상 큼 코딩테스트는 연산횟수 측정하는 시험 X 어느정도 복잡한지 대략적으로 알면 충분함 N^2 + 3N + 5 대신 N^2이라고 해도 무리 없음
  • 11. 점근적 표기법(정의) - 정확한 연산횟수가 아닌, 연산횟수의 추이활용해 시간복잡도를 표기 - 이 때 최악의 경우를 고려해서 점근적 표기법으로 나타내는 것을 빅오표기라고 함 방법은 아래와 같이 아주 간단 1. 다항식에서 가장 많이 영향을 미치는 항을 남기고 제거 2. 마지막 남은 항의 계수를 제거
  • 12. 점근적 표기법(최고차항 구하고 빅오표기법으로 표기하기)
  • 13. 점근적 표기법(자주 보이는 복잡도 1) 1차원 배열탐색 O(N) 2차원 배열탐색 O(N*M)
  • 14. 점근적 표기법(자주 보이는 복잡도 2) 이진탐색트리에서 원소 탐색 O(log N) 아래와 같이 매번 탐색대상이 반절로 줄어드는 경우 O(logN)이 됨(머지정렬의 머지, 이진탐색 등….)
  • 15. 점근적 표기법(자주 보이는 복잡도 3) 동전 N개를 던졌을때 경우의수 = O(2^N) ex) 동전 2개를 던졌을때 경우의수 = 2의 제곱 => 앞앞 => 앞뒤 => 뒤앞 => 뒤뒤 앞 뒤 앞앞 앞뒤 뒤앞 뒤뒤
  • 16. 점근적 표기법(코딩테스트에 활용하기) 1. 입력값의 크기를 통해 어느정도 시간복잡도 까지 허용되는지 추측 가능 => 구현시 알고리즘/자료구조 선택을 명확히 할 수 있음 => 본인이 구현한 코드가 시간초과 발생할 것인지 미리 파악 가능 => 대략 초당 1,000 ~ 2,000만 정도 연산을 한다고 가정하면 됨 정확한 연산횟수는 중요하지 않습니다. 대 략적으로 파악하면 됩니다. 문제에서 요구하는 성능을 만족할 경우 모 두 정답처리가 되야 하므로 충분히 여유있 게 출제 됩니다.
  • 17. 점근적 표기법(메서드의 시간 복잡도 파악) 동일한 동작을 하는 것처럼 보이나, 시간복잡도가 다른 경우 존재 => 기본 컨테이너 vs unordered 컨테이너 => vector와 dictionary/set에서 특정 key 존재유무 확인 => vector와 list에서 특정위치 원소 가져오기 - 동일한 코드처럼 보이나 코딩테스트 당락을 결정 할 수 있는 중요한 부분 - 직접 코드를 수행해서 확인하세요
  • 19. 커뮤니티 소개 - 오픈 카톡방 - 깃허브 - 디스코드
  • 20. 커뮤니티 소개(오픈카톡방) cont’d - 저자 직접 운영 - 대략 400명 정도 인원이 자유롭게 소통 - 개인적인 주제 및 코딩 관련 소통 가능
  • 22. 커뮤니티 소개(깃허브) cont’d - 책 문제의 정답코드 - 코딩테스트 준비를 위해 필요한 자료구조 및 알고리즘 - C++ 기본 문법 - STL의 성능 비교
  • 24. 커뮤니티 소개(디스코드) cont’d - 모각코 진행 - 공식 스터디 / 개인 스터디 모집 공고 및 진행 - 책 관련 문의 / 답변