SlideShare a Scribd company logo
1 of 13
Download to read offline
코딩테스트 합격자 되기
1주차 스터디
기본과정 - 시간복잡도 활용
● 책 미리보기(180 페이지 분량)
● 책 구매하기
● 소통할수 있는 톡방
● 깃허브에서 공부하기
● 네이버 카페
저자와 소통하기
유투브 강의와 같이 보세요
https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
내 코드를 평가하는 방식
- 내가 작성한 코드의 결과값과 테스트 케이스의 결과값이 일치해야함(정확성)
- 문제에서 요구하는 알고리즘 “성능”을 만족해야 함(효율성)
내코드 수행시
간
정답코드 수행
시간
비교
정답코드의 성능과 유사한지 확인해서 정답 처리
=> “성능” 이란 무엇인가?
성능을 측정하는 법 - 시간복잡도의 개념
- 수행시간을 측정하는 법과 연산 횟수를 측정하는 법이 있음.
1 2 3 4 5 6 7 8
배열을 한 번 순회하는 알고리즘의 “성능”은?
입력 출력
코드 동작
관점 1) 절대적인 시간이 어느정도 걸렸나?(성능,환경에 의존적)
관점 2) 코드의 연산이 몇번 됬나? -> 환경의존적이지 않은 방식
시간 복잡도란, 입력값과 연산 횟수의 상관관계에 따라 성능을 측정하는 것
시간 복잡도 측정 - 연산횟수가 항상 일정한 경우
입력 크기 연산 횟수
1 1
2 2
3 3
4 4
5 5
6 6
N N
연산횟수를 그래프로 그려보면
f(x) = x 그래프와 일치
배열을 순회하는 알고리즘의 연산횟수를 N으로 일반화 해보자
=> 입력 값이 N일때 연산횟수가 N번이라고 수 있음, 시간복잡도는 N이다.
시간 복잡도 측정 - 연산횟수가 항상 일정하지 않은 경우
- 각 경우마다 연산횟수가 많이 차이나는 경우가 있음(뭘 기준으로 할 것인가?)
1 2 3 4 5 6 … N
배열에서 내가 원하는 원소를 찾을때 시간복잡도?
경우 연산 횟수
최선의 경우 1
평균적인 경우 N/2
최악의 경우 N 가장 최악의 상황에서도 연산횟수가 N임을 보장함(worst case)
대부분 이정도의 연산횟수임을 보장함(average case)
가장 운이 좋은경우 이 연산횟수가 됨(best case)
제한 시간내에 결과값이 나와야 하는 코딩테스트의 목적과 맞으므로 이를 활용함
시간 복잡도 측정 - 정확한 연산횟수보다 추이(½)
우리 목적은 연산횟수를 정확히 세는게 아니라, 성능의 추이를 파악하고 테스트를
통과할지 판단한는 것 입니다. => 추이만 알아도 충분함. + 추이는 worst case
y = x^3
y = 2x^2
y = x^2 + 3x + 5
이 점부터 항상
solution()의 연산횟수보
다 많음
특정지점부터 항상 내 연산횟수보다 위에있는 함수들 중 하나를 사용하면 된다. 이를 점근적 상한이라고 하고
Big-O로 표한한다.(ex O(X^3), O(2X^2) 모두 가능 그러나 이 들중 무엇을 선택해야 할지 정해야 한다.
시간 복잡도 측정 - 정확한 연산횟수보다 추이(2/2)
여러 점근적 상한중 무엇을 선택할 것인가?
=> 최고차항의 상수및 부호를 떼고, 나머지를 버리면 된다.
y=x^2
y= 3x
y = 5
각 항의 추이를 그리면
최고차항 그래프 값이 나머
지를 무시할 정도로 점점 커
진다!
즉 연산횟수 X^2 + 3X + 5는
점근적 상한으로 표기할 때
O(X^2)으로 쓸 수 있다
* 최고차항 보다 높은 차수의
점근적 상한은 오차가 너무
크므로 의미없다(뒤에서 설
명)
시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(¼)
- 입력값을 보고 가용한 시간복잡도를 고민가능
- 초당 연산횟수를 1,000만 에서 3,000만 이라고 생각하면 됨
시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(2/4)
- 코딩테스트에 주로 등장하는 복잡도
복잡도 사용되는 예시 연산횟수
10 20
O(1) 배열의 인덱스를 통해서 원소접근 1 1
O(logn) 이진탐색 1 1
O(n) 순차탐색 10 20
O(nlogn) 정렬 10 26
O(n^2) 행렬곱셈, 다항식 계산 100 400
O(2^n) 부분집합 구하기, 하노이 1024 1,048,576
O(N!) 순열 생성, 외판원 문제(TSP) 3,628,800 2,432,902,008,176,640,000
복잡도 O(nlogn 미만 그래프)
전체 그래프
시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(¾)
12
선형탐색,O(x)
행렬곱셈O(x^2)
부분 집합,O(2^x)
트리탐색, O(logx)
시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(4/4)
- 문제에 주어지는 입력값으로, 사용가능한 알고리즘 추정 가능
O(N^2) 알고리즘으로 풀면 통과하지 못하겠구나!
정답 코드
복잡한 알고리즘을 생각하지 않고, 그냥 구현하
면 되겠구나!
정답 코드

More Related Content

What's hot

린더파트너스 서비스제안서
린더파트너스 서비스제안서린더파트너스 서비스제안서
린더파트너스 서비스제안서DongHwan Kim
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackKen Ogura
 
데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...
데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...
데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...Jungmin Lee
 
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축BOAZ Bigdata
 
2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때 2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때 choi kyumin
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Inc.
 
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?Yongho Ha
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016Taehoon Kim
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Inc.
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 
虫食算を作るアルゴリズム 公表Ver
虫食算を作るアルゴリズム 公表Ver虫食算を作るアルゴリズム 公表Ver
虫食算を作るアルゴリズム 公表VerKensuke Otsuki
 
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018Taehoon Kim
 
Random Forest Intro [랜덤포레스트 설명]
Random Forest Intro [랜덤포레스트 설명]Random Forest Intro [랜덤포레스트 설명]
Random Forest Intro [랜덤포레스트 설명]Hyunwoo Kim
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
KorQuAD introduction
KorQuAD introductionKorQuAD introduction
KorQuAD introductionSeungyoungLim
 

What's hot (15)

린더파트너스 서비스제안서
린더파트너스 서비스제안서린더파트너스 서비스제안서
린더파트너스 서비스제안서
 
Amortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 StackAmortize analysis of Deque with 2 Stack
Amortize analysis of Deque with 2 Stack
 
데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...
데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...
데이터 사이언티스트를 꿈꾸는 분들을 위한 개인적인 데이터 사이언스 경험과 소회 - what I experienced as a data sc...
 
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축
제 15회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [Hands-on 팀] : 수어 번역을 통한 위험 상황 속 의사소통 시스템 구축
 
2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때 2015 py con word2vec이 추천시스템을 만났을때
2015 py con word2vec이 추천시스템을 만났을때
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説
 
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?
빅데이터, 클라우드, IoT, 머신러닝. 왜 이렇게 많은 것들이 나타날까?
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
虫食算を作るアルゴリズム 公表Ver
虫食算を作るアルゴリズム 公表Ver虫食算を作るアルゴリズム 公表Ver
虫食算を作るアルゴリズム 公表Ver
 
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
머신러닝 해외 취업 준비: 닳고 닳은 이력서와 고통스러웠던 면접을 돌아보며 SNU 2018
 
Random Forest Intro [랜덤포레스트 설명]
Random Forest Intro [랜덤포레스트 설명]Random Forest Intro [랜덤포레스트 설명]
Random Forest Intro [랜덤포레스트 설명]
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
KorQuAD introduction
KorQuAD introductionKorQuAD introduction
KorQuAD introduction
 

Similar to 코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx

3.neural networks
3.neural networks3.neural networks
3.neural networksHaesun Park
 
세미나
세미나세미나
세미나Dongyi Kim
 
파이썬과 케라스로 배우는 강화학습 저자특강
파이썬과 케라스로 배우는 강화학습 저자특강파이썬과 케라스로 배우는 강화학습 저자특강
파이썬과 케라스로 배우는 강화학습 저자특강Woong won Lee
 
학습곡선과 라인밸런싱
학습곡선과 라인밸런싱학습곡선과 라인밸런싱
학습곡선과 라인밸런싱준호 김
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical MethodologyKyeongUkJang
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권freeNAVER D2
 
111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2NAVER D2
 
강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introduction강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introductionTaehoon Kim
 
TDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDSuwon Chae
 
Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리SANG WON PARK
 
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)Curt Park
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
2.supervised learning(epoch#2)-3
2.supervised learning(epoch#2)-32.supervised learning(epoch#2)-3
2.supervised learning(epoch#2)-3Haesun Park
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learningSunggon Song
 
Vector Optimization
Vector Optimization Vector Optimization
Vector Optimization SEMINARGROOT
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료Sangsu Song
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2
시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2
시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2Jinwon Park
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceJae-yeol Lee
 

Similar to 코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx (20)

3.neural networks
3.neural networks3.neural networks
3.neural networks
 
세미나
세미나세미나
세미나
 
파이썬과 케라스로 배우는 강화학습 저자특강
파이썬과 케라스로 배우는 강화학습 저자특강파이썬과 케라스로 배우는 강화학습 저자특강
파이썬과 케라스로 배우는 강화학습 저자특강
 
학습곡선과 라인밸런싱
학습곡선과 라인밸런싱학습곡선과 라인밸런싱
학습곡선과 라인밸런싱
 
Chapter 11 Practical Methodology
Chapter 11 Practical MethodologyChapter 11 Practical Methodology
Chapter 11 Practical Methodology
 
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
 
111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2111 n grinder-deview_day1_track1_session_1_ver_2
111 n grinder-deview_day1_track1_session_1_ver_2
 
강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introduction강화 학습 기초 Reinforcement Learning an introduction
강화 학습 기초 Reinforcement Learning an introduction
 
TDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDD
 
Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리
 
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
2.supervised learning(epoch#2)-3
2.supervised learning(epoch#2)-32.supervised learning(epoch#2)-3
2.supervised learning(epoch#2)-3
 
Function approximation as supervised learning
Function approximation as supervised learningFunction approximation as supervised learning
Function approximation as supervised learning
 
Vector Optimization
Vector Optimization Vector Optimization
Vector Optimization
 
[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료[소프트웨어교육] 알고리즘 교사 연수 자료
[소프트웨어교육] 알고리즘 교사 연수 자료
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2
시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2
시스템공학 기본(Fundamental of systems engineering) - Day6 design synthesis 2
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
 

코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx

  • 1. 코딩테스트 합격자 되기 1주차 스터디 기본과정 - 시간복잡도 활용
  • 2. ● 책 미리보기(180 페이지 분량) ● 책 구매하기 ● 소통할수 있는 톡방 ● 깃허브에서 공부하기 ● 네이버 카페 저자와 소통하기
  • 3. 유투브 강의와 같이 보세요 https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
  • 4. 내 코드를 평가하는 방식 - 내가 작성한 코드의 결과값과 테스트 케이스의 결과값이 일치해야함(정확성) - 문제에서 요구하는 알고리즘 “성능”을 만족해야 함(효율성) 내코드 수행시 간 정답코드 수행 시간 비교 정답코드의 성능과 유사한지 확인해서 정답 처리 => “성능” 이란 무엇인가?
  • 5. 성능을 측정하는 법 - 시간복잡도의 개념 - 수행시간을 측정하는 법과 연산 횟수를 측정하는 법이 있음. 1 2 3 4 5 6 7 8 배열을 한 번 순회하는 알고리즘의 “성능”은? 입력 출력 코드 동작 관점 1) 절대적인 시간이 어느정도 걸렸나?(성능,환경에 의존적) 관점 2) 코드의 연산이 몇번 됬나? -> 환경의존적이지 않은 방식 시간 복잡도란, 입력값과 연산 횟수의 상관관계에 따라 성능을 측정하는 것
  • 6. 시간 복잡도 측정 - 연산횟수가 항상 일정한 경우 입력 크기 연산 횟수 1 1 2 2 3 3 4 4 5 5 6 6 N N 연산횟수를 그래프로 그려보면 f(x) = x 그래프와 일치 배열을 순회하는 알고리즘의 연산횟수를 N으로 일반화 해보자 => 입력 값이 N일때 연산횟수가 N번이라고 수 있음, 시간복잡도는 N이다.
  • 7. 시간 복잡도 측정 - 연산횟수가 항상 일정하지 않은 경우 - 각 경우마다 연산횟수가 많이 차이나는 경우가 있음(뭘 기준으로 할 것인가?) 1 2 3 4 5 6 … N 배열에서 내가 원하는 원소를 찾을때 시간복잡도? 경우 연산 횟수 최선의 경우 1 평균적인 경우 N/2 최악의 경우 N 가장 최악의 상황에서도 연산횟수가 N임을 보장함(worst case) 대부분 이정도의 연산횟수임을 보장함(average case) 가장 운이 좋은경우 이 연산횟수가 됨(best case) 제한 시간내에 결과값이 나와야 하는 코딩테스트의 목적과 맞으므로 이를 활용함
  • 8. 시간 복잡도 측정 - 정확한 연산횟수보다 추이(½) 우리 목적은 연산횟수를 정확히 세는게 아니라, 성능의 추이를 파악하고 테스트를 통과할지 판단한는 것 입니다. => 추이만 알아도 충분함. + 추이는 worst case y = x^3 y = 2x^2 y = x^2 + 3x + 5 이 점부터 항상 solution()의 연산횟수보 다 많음 특정지점부터 항상 내 연산횟수보다 위에있는 함수들 중 하나를 사용하면 된다. 이를 점근적 상한이라고 하고 Big-O로 표한한다.(ex O(X^3), O(2X^2) 모두 가능 그러나 이 들중 무엇을 선택해야 할지 정해야 한다.
  • 9. 시간 복잡도 측정 - 정확한 연산횟수보다 추이(2/2) 여러 점근적 상한중 무엇을 선택할 것인가? => 최고차항의 상수및 부호를 떼고, 나머지를 버리면 된다. y=x^2 y= 3x y = 5 각 항의 추이를 그리면 최고차항 그래프 값이 나머 지를 무시할 정도로 점점 커 진다! 즉 연산횟수 X^2 + 3X + 5는 점근적 상한으로 표기할 때 O(X^2)으로 쓸 수 있다 * 최고차항 보다 높은 차수의 점근적 상한은 오차가 너무 크므로 의미없다(뒤에서 설 명)
  • 10. 시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(¼) - 입력값을 보고 가용한 시간복잡도를 고민가능 - 초당 연산횟수를 1,000만 에서 3,000만 이라고 생각하면 됨
  • 11. 시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(2/4) - 코딩테스트에 주로 등장하는 복잡도 복잡도 사용되는 예시 연산횟수 10 20 O(1) 배열의 인덱스를 통해서 원소접근 1 1 O(logn) 이진탐색 1 1 O(n) 순차탐색 10 20 O(nlogn) 정렬 10 26 O(n^2) 행렬곱셈, 다항식 계산 100 400 O(2^n) 부분집합 구하기, 하노이 1024 1,048,576 O(N!) 순열 생성, 외판원 문제(TSP) 3,628,800 2,432,902,008,176,640,000 복잡도 O(nlogn 미만 그래프) 전체 그래프
  • 12. 시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(¾) 12 선형탐색,O(x) 행렬곱셈O(x^2) 부분 집합,O(2^x) 트리탐색, O(logx)
  • 13. 시간 복잡도 - 코딩테스트에서 어떻게 활용할 것인가?(4/4) - 문제에 주어지는 입력값으로, 사용가능한 알고리즘 추정 가능 O(N^2) 알고리즘으로 풀면 통과하지 못하겠구나! 정답 코드 복잡한 알고리즘을 생각하지 않고, 그냥 구현하 면 되겠구나! 정답 코드