코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
오늘은 재귀에 대해 설명 드리겠습니다.
커리큘럼은 아래와 같습니다.
재귀의 정의
재귀의 예시 - 팩토리얼
재귀의 예시 - 하노이 탑
재귀를 사용할 때 조심해야 하는 경우
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
유투브 강의 : https://youtu.be/wtBUKpXPN4Q?si=kNdmLgrpQm7xB-j_
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
오늘은 재귀에 대해 설명 드리겠습니다.
커리큘럼은 아래와 같습니다.
재귀의 정의
재귀의 예시 - 팩토리얼
재귀의 예시 - 하노이 탑
재귀를 사용할 때 조심해야 하는 경우
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
코딩테스트를 처음 공부하는 분들을 위한 강의 입니다.
★★아래 필수 확인(영상강의,저자소통방,저자카페 링크 있음)★★
저자카톡방 : https://open.kakao.com/o/gX0WnTCf
저자 카페 : https://cafe.naver.com/dremdeveloper
세션 소개
저는 개발자로서 RoamResearch와 VSCode를 사용하던 중 불의의 사고를 겪었습니다. 사고를 겪은 직후, Neovim을 접하고 나서 저의 개발 도구와 글 작성 도구를 모두 이것으로 전환하게 되었습니다. 그만큼 매력적인 도구인 Neovim을 여러분께 소개하고, 100퍼센트 활용할 수 있는 팁까지 공유하고 싶습니다.
발표자 소개
Neovim 에 과몰입한 백엔드 개발자
INTP과 ENFP 사이를 오가는 하이브리드
사색을 좋아하면서 한편으로는 도파민 자극을 좋아합니다
Comonads are the category-theoretic dual of monads. While monads have been found to be a very useful design pattern for structuring programs in functional languages, such as Haskell, comonads have so far failed to gain much traction. In this talk we will look at what comonads are and how they are defined in Haskell, comparing them with the Haskell definition of monads. We will then look at some specific examples of comonads and how they can be used in practical programs.
We will assume basic knowledge of Haskell, including the Monad class and common instances. No knowledge of category theory will be required.
세션 소개
저는 개발자로서 RoamResearch와 VSCode를 사용하던 중 불의의 사고를 겪었습니다. 사고를 겪은 직후, Neovim을 접하고 나서 저의 개발 도구와 글 작성 도구를 모두 이것으로 전환하게 되었습니다. 그만큼 매력적인 도구인 Neovim을 여러분께 소개하고, 100퍼센트 활용할 수 있는 팁까지 공유하고 싶습니다.
발표자 소개
Neovim 에 과몰입한 백엔드 개발자
INTP과 ENFP 사이를 오가는 하이브리드
사색을 좋아하면서 한편으로는 도파민 자극을 좋아합니다
Comonads are the category-theoretic dual of monads. While monads have been found to be a very useful design pattern for structuring programs in functional languages, such as Haskell, comonads have so far failed to gain much traction. In this talk we will look at what comonads are and how they are defined in Haskell, comparing them with the Haskell definition of monads. We will then look at some specific examples of comonads and how they can be used in practical programs.
We will assume basic knowledge of Haskell, including the Monad class and common instances. No knowledge of category theory will be required.
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #1
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
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(변경 가능)하므로, 기존 객체 유지
된 상태에서 값이 수정됨
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
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