SlideShare a Scribd company logo
코딩테스트 합격자 되기
2주차 스터디
기본과정 - 리스트/딕셔너리
유투브 강의와 같이 보세요
리스트 영상 딕셔너리 영상
책 구경하기
책 구매하기 미리보기(무료,180페이지)
저자와 소통하기
기본적인 자료구조/알고리즘 코드
꼭 알아야 할 개념이 포함된 코드
(성능측정/자주실수하는 코드 등)
책에 있는 문제의 정답코드
리스트
리스트
- “[]”를 사용해서 선언함
- 데이터의 순서가 있는 변경 가능한 컬렉션
- 내부는 동적배열로 구현됨
리스트 특성
리스트의 특성(1 / 3)
1
2
3
lst
140500114981104
140500114981136
140500114981168
메모리 주소
선언시 “[]”를 사용함
+32
+32
메모리가 연속적으로 잡히므로
임의접근(인덱스 사용이 가능, lst[0], lst[1], lst[2])
리스트의 특성(2 / 3)
1
2
3
lst
140500114981104
140500114981136
140500114981168
메모리 주소
+32
+32
+32
4
140500114981200
- 동적배열로 관리되기 때문에 크기 고민 X
- 기존 원소는 다시 생성되지 않고 유지
리스트 생성(3 / 3)
1
2
5
3
lst
140500114981104
140500114981136
140500114981168
메모리 주소
+32
+32
- mutable(변경 가능)하므로, 기존 객체 유지
된 상태에서 값이 수정됨
리스트 생성
리스트 생성(1 / 4)
1
2
3
my_list
4
5
리스트 생성(2 / 4)
0
1
4
squared_list
0
1
2
3
4
9
16
x
리스트 생성(3 / 4)
0
repeated_list
0
0
0
0
리스트 생성(4 / 4)
1
lst
2
3
‘c’
lst_str
‘a’
‘p’
리스트 원소 접근
리스트의 구조를 다시 보면!
리스트 인덱싱
- 리스트는 순서가 명확하므로 임의접근 가능(인덱스로 접근)
- : 을 활용해서 원소 하나가 특정 범위의 원소를 가져올 수 있음
- [A:]의 경우 인덱스 A에 해당되는 원소 부터 의 뒤가 비어있을 경우 맨 끝까지 원소를 가져옴
- [:A]의 경우, 처음부터 인덱스 A-1에 해당되는 원소까지 가져옴
- 음수인 경우에도 동일하게 적용됨, [:]를 활용하면 전체를 나타낼수도 있음
리스트의 슬라이싱
리스트 메소드
- 리스트의 끝에 item을 추가
- 반환값은 없음
- 시간복잡도 O(1)
append(item)
1
2
3
lst
4
5
원소 추가
- 리스트의 맨 끝의 item을 삭제
- 반환값은 삭제한 원소
- 시간복잡도 O(1)
pop()
1
2
3
lst
4
맨 뒤의 원소를
삭제 하고 반환
- 리스트의 맨 앞의 item을 삭제
- 반환값은 삭제한 원소
- 시간복잡도 O(N), N은 리스트의 길이
pop(0)
1
2
3
lst
맨 앞의 원소 삭제
모든 원소가
이동해야함
- 리스트에서 “맨 처음 나오는” item에 해당되는 값을 삭제
- 반환값은 없음
- 시간복잡도 O(N), N은 리스트의 길이
remove(item)
1
3
11
lst
7
11
맨 처음 나오는 item 삭제
맨 처음 값만 삭제 되므로 item과 같은 값이지만 삭제 되지 않음
- 리스트의 뒤에 s의 모든 요소를 추가
- 반환값은 없음
- 시간복잡도 O(s), s의 원소 길이
extend(s)
1
2
3
lst
7
8
lst의 뒤에 [7,8] 추가
- 리스트에 item 값이 있는지 확인
- item이 있으면 True, 없으면 False
- 시간복잡도 O(N), N은 리스트의 길이
item in 리스트
1
2
3
lst
리스트 사용시 주의할 점
- 리스트의 맨 앞의 원소를 삭제할 경우에는 뒤의 모든 원소가 copy-move 됩니다. O(N)
- 대안 : deque를 사용 O(1)
맨 앞에 원소 삭제(삽입도 마찬가지)
1
2
3
lst
copy move
1
2
3
lst copy-move X
deque의 자세한 내용은 아래 참조
https://github.com/dremdeveloper/codingtest_python/blob/main/Algorithm_with_DataStructure/deque.py
- 매번 원소를 탐색할 때 마다 순차 탐색이 진행됩니다. O(N)
- 대안 : set을 사용 합니다. O(1)
빈번 하게 원소를 탐색
1
2
3
lst
한번 찾을때 마다 3회
탐색하고, 이를 99번
반복
297번 연산
set은 해시기반으므로 한번 찾을때 마다 1회 반복합
니다. 99회 연산!! 따라서 시간 복잡도 O(1)
set은 2주차 에서 다루지 않습니다. 아래 참조
https://github.com/dremdeveloper/codingtest_python/blob/main/Algorit
hm_with_DataStructure/set.py
딕셔너리
딕셔너리
- 해시 기반으로 이루어진 자료구조
- { 키1:값1, 키2:값2} 와 같이 키-값 쌍으로 되어 있음
딕셔너리의 특성
해시의 개념 - 해시가 없다면?
- 이름을 통해 전화번호를 검색하는 경우를 상상 해보자.
- 이름을 검색할 때마다 이름 테이블에서 해당 이름을 찾아야함, O(N)이 걸림
- “{}”을 사용해서 선언 함, 단 set과 다른점은 내부 원소가 키:값형태 임.
해시의 개념 - 해시를 활용한다면?
- 해시함수를 활용해서 “이름” 자체를 인덱스로 만들자.
- 이름 자체가 인덱스이므로 충돌이 없다면 , O(1)이 걸림
딕셔너리 생성
딕셔너리의 생성
dict
2323
25211
“value1”
“value2”
“key1” 2323
“key2” 25211
해싱 함수
딕셔너리 접근
- 딕셔너리에서 key에 해당되는 값을 반환 함, 해당 되는 값이 없을 경우 None을 반환
- get()의 시간복잡도는 O(1)
딕셔너리의 접근 - get(key)
dic
“a”
“b”
1
2
“c” 3
- 딕셔너리에서 key에 해당되는 값을 반환 함, 해당 되는 값이 없을 경우 KeyError 발생함!!!
- []의 시간복잡도는 O(1)
딕셔너리의 접근 - [key]
dic
“a”
“b”
1
2
“c” 3
- key error가 발생하지 않도록 if-else 문으로 체크해서 접근해야함
딕셔너리의 접근 - [key], 이린석으로 사용해야 함
dic
“a”
“b”
1
2
“c” 3
딕셔너리 값 변경
- 딕셔너리에서 key에 해당되는 값을 변경할 수 있음, 해당 되는 값이 없을 경우 KeyError 발생함!!!
- 시간 복잡도 O(1)
딕셔너리의 값 변경 - [key]활용, 예외사항 고려
dic
“a”
“b”
1
2
“c”
3
5
딕셔너리 메서드
- 호출한 dictionary에 dict에 있는 모든 key-value쌍을 추가
- dict에 있는 key-value쌍의 갯수가 K라면 시간복잡도는 O(K)
딕셔너리 메서드 - update(dict)
dic
“a”
“b”
1
2
“c” 3
“d” 4
“e” 5
아래 두개를 추가
“d”:4
“e”:5
- 딕셔너리의 모든 key 확인 가능
- 시간복잡도 O(1)
- 반복문은 dic 크기만큼 연산하므로 N번 연산
딕셔너리 메서드 - keys(), 모든 key 확인
dic
“a”
“b”
1
2
“c” 3
딕셔너리의 모든 키 정보 확인 가능
- 딕셔너리의 모든 key,value 확인 가능
- 시간복잡도 O(1)
- 반복문은 dic 크기만큼 연산하므로 N번 연산
딕셔너리 메서드 - items(), 모든 key,value 확인
dic
“a”
“b”
1
2
“c” 3
딕셔너리의 모든 키,값 정보 확인 가능
- 딕셔너리의 특정 key에 해당 되는 버킷 삭제
- 반환값 없음
- 시간복잡도 O(1)
딕셔너리 메서드 - delete, 해당 key 버킷 삭제
dic
“a”
“b”
1
2
“c” 3
삭제
dic
“b” 2
“c” 3
삭제된 후 모습
- 딕셔너리의 특정 key에 해당 되는 버킷 삭제
- 삭제된 key에 해당되는 값 반환
- 시간복잡도 O(1)
딕셔너리 메서드 - pop(key), 해당 key 버킷 삭제
dic
“a”
“b”
1
2
“c” 3
삭제
dic
“b” 2
“c” 3
삭제된 후 모습
딕셔너리 사용시 주의할 점
- mutable한 객체를 key로 하면 Key error가 발생
mutable(변경가능한 객체)는 key가 될수 없음
Mutable Object Immutable Object
list int,float,bool…
set string
dictionary tuple
딕셔너리의 key가 될 수 없음
- 딕셔너리에서 key에 해당되는 값을 변경할 수 있음, 해당 되는 값이 없을 경우 KeyError 발생함!!!
아래와 같이 if,else를 사용하거나 값이 없는 key에 기본값을 주고 싶으면 defaultdict이 대안
- 시간 복잡도 O(1)
[]을 사용할 경우 key가 없으면 KeyError가 발생
dic
“a”
“b”
1
2
“c”
3
5
- 딕셔너리를 사용하려고 할때 중복되는 key가 있는지 검토해야 함.
- 중복 key가 있다면 list,deque 같이 중복여부에 영향을 받지 않는 자료구조를 사용하는게 대안
딕셔너리는 중복 key를 허용하지 않음
dic
“a”
“b”
1
4
2
“c” 5

More Related Content

What's hot

Elasticsearch를 활용한 GIS 검색
Elasticsearch를 활용한 GIS 검색Elasticsearch를 활용한 GIS 검색
Elasticsearch를 활용한 GIS 검색
ksdc2019
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
Yoshitaka Kawashima
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
kwatch
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
NAVER D2
 
写像 12 相
写像 12 相写像 12 相
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
 
[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템
NAVER D2
 
Trianguler
TriangulerTrianguler
Trianguler
Ken Ogura
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
okuraofvegetable
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
Yurim Jin
 
Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열
Excelcon
 
Презентація 3-1. Основи HTML.pdf
Презентація 3-1. Основи HTML.pdfПрезентація 3-1. Основи HTML.pdf
Презентація 3-1. Основи HTML.pdf
KaterinaObukhova
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
Chris Ohk
 
Comonads in Haskell
Comonads in HaskellComonads in Haskell
Comonads in Haskell
David Overton
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
DaeMyung Kang
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
tmaehara
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
Jaeseung Ha
 
双対性
双対性双対性
双対性
Yoichi Iwata
 

What's hot (20)

Elasticsearch를 활용한 GIS 검색
Elasticsearch를 활용한 GIS 검색Elasticsearch를 활용한 GIS 검색
Elasticsearch를 활용한 GIS 검색
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 
写像 12 相
写像 12 相写像 12 相
写像 12 相
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템[224] 번역 모델 기반_질의_교정_시스템
[224] 번역 모델 기반_질의_교정_시스템
 
Trianguler
TriangulerTrianguler
Trianguler
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 
Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열
 
Презентація 3-1. Основи HTML.pdf
Презентація 3-1. Основи HTML.pdfПрезентація 3-1. Основи HTML.pdf
Презентація 3-1. Основи HTML.pdf
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
Comonads in Haskell
Comonads in HaskellComonads in Haskell
Comonads in Haskell
 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
 
双対性
双対性双対性
双対性
 

Similar to 코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리

Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
Hyungyong Kim
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
HyeonSeok Choi
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
HoChul Shin
 
Python + Excel
Python + Excel Python + Excel
Python + Excel
POSTECH
 
Data Structures
Data StructuresData Structures
Data Structures
skku_npc
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
종민 김
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
Booseol Shin
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
영기 김
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2KoChungWook
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
승혁 조
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
Jaeseok Park
 
파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)
SK(주) C&C - 강병호
 
PostgreSql vaccum
PostgreSql vaccumPostgreSql vaccum
PostgreSql vaccum
승범 현
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
Nomota Hiongun KIM
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
Yong Joon Moon
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
Yoonwhan Lee
 

Similar to 코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리 (20)

Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
Gpg1
Gpg1Gpg1
Gpg1
 
Python + Excel
Python + Excel Python + Excel
Python + Excel
 
Data Structures
Data StructuresData Structures
Data Structures
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
자료구조 Project2
자료구조 Project2자료구조 Project2
자료구조 Project2
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
R 스터디 첫번째
R 스터디 첫번째R 스터디 첫번째
R 스터디 첫번째
 
파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)
 
PostgreSql vaccum
PostgreSql vaccumPostgreSql vaccum
PostgreSql vaccum
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623엘라스틱서치 분석 이해하기 20160623
엘라스틱서치 분석 이해하기 20160623
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
자료구조02
자료구조02자료구조02
자료구조02
 

More from ultrasuperrok

코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
ultrasuperrok
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
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
 

More from ultrasuperrok (7)

코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
코딩테스트 합격자 되기 C++ 06_07장 스택과 큐에 대한 강의 입니다.
 
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
코딩테스트 합격자 되기 C++ 04_05장_코딩 테스트를 할때 반드시 알아야할 문법
 
코딩테스트 합격자 되기 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장을 정리한 강의자료 입니다.
 

코딩테스트 합격자 되기 2주차 스터디 - 리스트_딕셔너리

  • 1. 코딩테스트 합격자 되기 2주차 스터디 기본과정 - 리스트/딕셔너리
  • 2. 유투브 강의와 같이 보세요 리스트 영상 딕셔너리 영상
  • 3. 책 구경하기 책 구매하기 미리보기(무료,180페이지)
  • 4. 저자와 소통하기 기본적인 자료구조/알고리즘 코드 꼭 알아야 할 개념이 포함된 코드 (성능측정/자주실수하는 코드 등) 책에 있는 문제의 정답코드
  • 6. 리스트 - “[]”를 사용해서 선언함 - 데이터의 순서가 있는 변경 가능한 컬렉션 - 내부는 동적배열로 구현됨
  • 8. 리스트의 특성(1 / 3) 1 2 3 lst 140500114981104 140500114981136 140500114981168 메모리 주소 선언시 “[]”를 사용함 +32 +32 메모리가 연속적으로 잡히므로 임의접근(인덱스 사용이 가능, lst[0], lst[1], lst[2])
  • 9. 리스트의 특성(2 / 3) 1 2 3 lst 140500114981104 140500114981136 140500114981168 메모리 주소 +32 +32 +32 4 140500114981200 - 동적배열로 관리되기 때문에 크기 고민 X - 기존 원소는 다시 생성되지 않고 유지
  • 10. 리스트 생성(3 / 3) 1 2 5 3 lst 140500114981104 140500114981136 140500114981168 메모리 주소 +32 +32 - mutable(변경 가능)하므로, 기존 객체 유지 된 상태에서 값이 수정됨
  • 12. 리스트 생성(1 / 4) 1 2 3 my_list 4 5
  • 13. 리스트 생성(2 / 4) 0 1 4 squared_list 0 1 2 3 4 9 16 x
  • 14. 리스트 생성(3 / 4) 0 repeated_list 0 0 0 0
  • 15. 리스트 생성(4 / 4) 1 lst 2 3 ‘c’ lst_str ‘a’ ‘p’
  • 18. 리스트 인덱싱 - 리스트는 순서가 명확하므로 임의접근 가능(인덱스로 접근)
  • 19. - : 을 활용해서 원소 하나가 특정 범위의 원소를 가져올 수 있음 - [A:]의 경우 인덱스 A에 해당되는 원소 부터 의 뒤가 비어있을 경우 맨 끝까지 원소를 가져옴 - [:A]의 경우, 처음부터 인덱스 A-1에 해당되는 원소까지 가져옴 - 음수인 경우에도 동일하게 적용됨, [:]를 활용하면 전체를 나타낼수도 있음 리스트의 슬라이싱
  • 21. - 리스트의 끝에 item을 추가 - 반환값은 없음 - 시간복잡도 O(1) append(item) 1 2 3 lst 4 5 원소 추가
  • 22. - 리스트의 맨 끝의 item을 삭제 - 반환값은 삭제한 원소 - 시간복잡도 O(1) pop() 1 2 3 lst 4 맨 뒤의 원소를 삭제 하고 반환
  • 23. - 리스트의 맨 앞의 item을 삭제 - 반환값은 삭제한 원소 - 시간복잡도 O(N), N은 리스트의 길이 pop(0) 1 2 3 lst 맨 앞의 원소 삭제 모든 원소가 이동해야함
  • 24. - 리스트에서 “맨 처음 나오는” item에 해당되는 값을 삭제 - 반환값은 없음 - 시간복잡도 O(N), N은 리스트의 길이 remove(item) 1 3 11 lst 7 11 맨 처음 나오는 item 삭제 맨 처음 값만 삭제 되므로 item과 같은 값이지만 삭제 되지 않음
  • 25. - 리스트의 뒤에 s의 모든 요소를 추가 - 반환값은 없음 - 시간복잡도 O(s), s의 원소 길이 extend(s) 1 2 3 lst 7 8 lst의 뒤에 [7,8] 추가
  • 26. - 리스트에 item 값이 있는지 확인 - item이 있으면 True, 없으면 False - 시간복잡도 O(N), N은 리스트의 길이 item in 리스트 1 2 3 lst
  • 28. - 리스트의 맨 앞의 원소를 삭제할 경우에는 뒤의 모든 원소가 copy-move 됩니다. O(N) - 대안 : deque를 사용 O(1) 맨 앞에 원소 삭제(삽입도 마찬가지) 1 2 3 lst copy move 1 2 3 lst copy-move X deque의 자세한 내용은 아래 참조 https://github.com/dremdeveloper/codingtest_python/blob/main/Algorithm_with_DataStructure/deque.py
  • 29. - 매번 원소를 탐색할 때 마다 순차 탐색이 진행됩니다. O(N) - 대안 : set을 사용 합니다. O(1) 빈번 하게 원소를 탐색 1 2 3 lst 한번 찾을때 마다 3회 탐색하고, 이를 99번 반복 297번 연산 set은 해시기반으므로 한번 찾을때 마다 1회 반복합 니다. 99회 연산!! 따라서 시간 복잡도 O(1) set은 2주차 에서 다루지 않습니다. 아래 참조 https://github.com/dremdeveloper/codingtest_python/blob/main/Algorit hm_with_DataStructure/set.py
  • 31. 딕셔너리 - 해시 기반으로 이루어진 자료구조 - { 키1:값1, 키2:값2} 와 같이 키-값 쌍으로 되어 있음
  • 33. 해시의 개념 - 해시가 없다면? - 이름을 통해 전화번호를 검색하는 경우를 상상 해보자. - 이름을 검색할 때마다 이름 테이블에서 해당 이름을 찾아야함, O(N)이 걸림 - “{}”을 사용해서 선언 함, 단 set과 다른점은 내부 원소가 키:값형태 임.
  • 34. 해시의 개념 - 해시를 활용한다면? - 해시함수를 활용해서 “이름” 자체를 인덱스로 만들자. - 이름 자체가 인덱스이므로 충돌이 없다면 , O(1)이 걸림
  • 38. - 딕셔너리에서 key에 해당되는 값을 반환 함, 해당 되는 값이 없을 경우 None을 반환 - get()의 시간복잡도는 O(1) 딕셔너리의 접근 - get(key) dic “a” “b” 1 2 “c” 3
  • 39. - 딕셔너리에서 key에 해당되는 값을 반환 함, 해당 되는 값이 없을 경우 KeyError 발생함!!! - []의 시간복잡도는 O(1) 딕셔너리의 접근 - [key] dic “a” “b” 1 2 “c” 3
  • 40. - key error가 발생하지 않도록 if-else 문으로 체크해서 접근해야함 딕셔너리의 접근 - [key], 이린석으로 사용해야 함 dic “a” “b” 1 2 “c” 3
  • 42. - 딕셔너리에서 key에 해당되는 값을 변경할 수 있음, 해당 되는 값이 없을 경우 KeyError 발생함!!! - 시간 복잡도 O(1) 딕셔너리의 값 변경 - [key]활용, 예외사항 고려 dic “a” “b” 1 2 “c” 3 5
  • 44. - 호출한 dictionary에 dict에 있는 모든 key-value쌍을 추가 - dict에 있는 key-value쌍의 갯수가 K라면 시간복잡도는 O(K) 딕셔너리 메서드 - update(dict) dic “a” “b” 1 2 “c” 3 “d” 4 “e” 5 아래 두개를 추가 “d”:4 “e”:5
  • 45. - 딕셔너리의 모든 key 확인 가능 - 시간복잡도 O(1) - 반복문은 dic 크기만큼 연산하므로 N번 연산 딕셔너리 메서드 - keys(), 모든 key 확인 dic “a” “b” 1 2 “c” 3 딕셔너리의 모든 키 정보 확인 가능
  • 46. - 딕셔너리의 모든 key,value 확인 가능 - 시간복잡도 O(1) - 반복문은 dic 크기만큼 연산하므로 N번 연산 딕셔너리 메서드 - items(), 모든 key,value 확인 dic “a” “b” 1 2 “c” 3 딕셔너리의 모든 키,값 정보 확인 가능
  • 47. - 딕셔너리의 특정 key에 해당 되는 버킷 삭제 - 반환값 없음 - 시간복잡도 O(1) 딕셔너리 메서드 - delete, 해당 key 버킷 삭제 dic “a” “b” 1 2 “c” 3 삭제 dic “b” 2 “c” 3 삭제된 후 모습
  • 48. - 딕셔너리의 특정 key에 해당 되는 버킷 삭제 - 삭제된 key에 해당되는 값 반환 - 시간복잡도 O(1) 딕셔너리 메서드 - pop(key), 해당 key 버킷 삭제 dic “a” “b” 1 2 “c” 3 삭제 dic “b” 2 “c” 3 삭제된 후 모습
  • 50. - mutable한 객체를 key로 하면 Key error가 발생 mutable(변경가능한 객체)는 key가 될수 없음 Mutable Object Immutable Object list int,float,bool… set string dictionary tuple 딕셔너리의 key가 될 수 없음
  • 51. - 딕셔너리에서 key에 해당되는 값을 변경할 수 있음, 해당 되는 값이 없을 경우 KeyError 발생함!!! 아래와 같이 if,else를 사용하거나 값이 없는 key에 기본값을 주고 싶으면 defaultdict이 대안 - 시간 복잡도 O(1) []을 사용할 경우 key가 없으면 KeyError가 발생 dic “a” “b” 1 2 “c” 3 5
  • 52. - 딕셔너리를 사용하려고 할때 중복되는 key가 있는지 검토해야 함. - 중복 key가 있다면 list,deque 같이 중복여부에 영향을 받지 않는 자료구조를 사용하는게 대안 딕셔너리는 중복 key를 허용하지 않음 dic “a” “b” 1 4 2 “c” 5