코딩테스트 합격자 되기 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

PPTX
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
PDF
Computational Complexity
PPTX
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
PPTX
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
PPTX
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
PPTX
Machine learning linearregression
PPTX
랩탑으로 tensorflow 도전하기 - tutorial
PPT
1.자료구조와 알고리즘(강의자료)
코딩테스트 합격자 되기 C++ 03장 시간 복잡도에 대한 강의를 진행했습니다.
Computational Complexity
코딩테스트 합격자 되기 1주차 스터디 - 시간복잡도.pptx
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩테스트 합격자 되기 C++ 00~ 01장(효율적 공부하는방법).pptx
Machine learning linearregression
랩탑으로 tensorflow 도전하기 - tutorial
1.자료구조와 알고리즘(강의자료)

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

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

More from ultrasuperrok (16)

PDF
시간 복잡도를 제대로 정리한 자료 입니다. 개발자분들 코딩 테스트 준비에 도움이 되길 바랍니다.
PDF
[HBM-PPT]코딩 테스트 제대로 공부해서 합격하는 방법 강의자료 공유 합니다.
PPTX
코딩테스트 합격자 되기 C++ 16장 그리디를 강의한 자료 입니다. 영상도 있습니다.
PPTX
코딩테스트 합격자 되기 C++ 15장 동적계획법에 대한 강의자료 입니다.
PPTX
코딩테스트 합격자 되기 C++ 13장 정렬(sorting)에 대한 강의 자료 입니다.
PPTX
코딩테스트 합격자 되기 C++ 12장 백트래킹에 대한 강의 자료 입니다.
PPTX
코딩 테스트 합격자 되기 C++ 11장 그래프에 대한 강의 자료 입니다.
PPTX
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
PPTX
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
PPTX
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
PPTX
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
PPTX
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
PPTX
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
PPTX
코딩테스트 합격자 되기 3주차 스터디 - 재귀
PPTX
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
PPTX
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
시간 복잡도를 제대로 정리한 자료 입니다. 개발자분들 코딩 테스트 준비에 도움이 되길 바랍니다.
[HBM-PPT]코딩 테스트 제대로 공부해서 합격하는 방법 강의자료 공유 합니다.
코딩테스트 합격자 되기 C++ 16장 그리디를 강의한 자료 입니다. 영상도 있습니다.
코딩테스트 합격자 되기 C++ 15장 동적계획법에 대한 강의자료 입니다.
코딩테스트 합격자 되기 C++ 13장 정렬(sorting)에 대한 강의 자료 입니다.
코딩테스트 합격자 되기 C++ 12장 백트래킹에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 11장 그래프에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 10장 집합에 대한 강의 자료 입니다.
코딩 테스트 합격자 되기 C++ 09장 트리에 대한 강의 자료 입니다.
코딩테스트 합격자 되기 C++ 08장 해시를 설명한 강의 자료 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
이번에 새로 나온 코딩 테스트 합격자 되기 C++편 책을 소개하는 PPT 입니다.
코딩테스트 합격자 되기 3주차 스터디 - 재귀
코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리
코딩테스트 합격자 되기 연말강의자료(프로그래머스 콜라보)
Ad

코딩테스트 합격자 되기 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 - 모각코 진행 - 공식 스터디 / 개인 스터디 모집 공고 및 진행 - 책 관련 문의 / 답변