06.14 항해99 8일차
이번주 배운것 및 노트 :
이진탐색 > 정렬 필요.
순차탐색
// 연산자 : 소수점 이하 버리고 몫만.
Del list[N:N] : 인덱스 n~n의 리스트 삭제
List.remove(value) : 가장 먼저 발견된 요소 삭제
range(시작숫자,종료숫자,스텝) - range(5) > 1,2,3,4,5
재귀함수 : 자신을 반복하는 코드 - 목적 (점점 좁혀가는 것)
재귀함수 내에 자신의 함수.
탈출 조건 필수. (If함수로 return 걸기)
장점 - 간결하고, 명확
팩토리얼 = 1부터 N까지의 정수를 모두 곱한 것.
3! = 3*2*1
정열
Array.sort()
> O(N*logN)
집합 : 중복을 허용하지 않는 자료형 > set[값1,값2,값3,]
—
*들어가고 나오는 곳이 정해져있는 자료구조
스택 : Last in, First out
큐 : First in, First out
*해쉬: 고정된 길이의 데이터
정렬 - 데이터 나열법 : 효율적 탐색가능.
버블정렬 - 마지막-1번째 자료와 마지막 자료를 비교 및 교환하며 정렬
Swap > a, b = b, a
선택정렬- 최솟값 선택 후 변경
삽입정렬- 비교 후 필요할때 올바른 위치에 ‘삽입’
- 정렬을 유지하면서 변경.
-거의 정렬되어있을 경우, 시간이 최소 N 걸릴 수 있음
(중요)병합정렬- 합치면서 정렬
**분할정복 - 문제를 작은 문제로 분리, 각각 해결 후 원래 문제를 해결하기.
스택 : 한쪽 끝으로만 자료를 넣고 꺼낼 수 있는 구조(LIFO)
-push(data) : 맨위에 데이터 넣기
-pop() : 맨 위의 데이터 뽑기
-peek() : 맨위의 데이터 보기
-IsEmpty() : 스택의 공백여부 반환
큐 : 한쪽 끝으로 자료를 넣고 다른 끝으로 자료를 빼는 선형구조(FIFO)
-enqueue(data) : 맨 뒤에 데이터 추가
-dequeue(): 맨 위의 데이터 뽑기
-peek(): 맨 위의 데이터 보기
-isEmpty(): 큐의 공백여부 반환
해쉬: 키를 매핑할 수 있는, 연관배열 추가에 사용되는 자료구조.
ㄴ즉각적 데이터 검색과 업데이트 필요시.
== dictionary
데이터의 검색과 저장이 빠르게 진행.
>>hash(object) :: 파이썬 제공함수
hasy(“값”) % index_num > 인덱스 지정.
체이닝 - 인덱스 충돌시, 링크드 리스트로 해결.
개방 주소법(Open Adressing) - 인덱스 충돌시, 다음 칸에 넣는 걸로 해결.
Lamda 함수 <<?
TIP 알고리즘을 대하는 자세
꾸준,찾아보기,머리로만 ㄴ
공략법
1.배경지식
ㄴ기초적 프로그래밍 지식/수학적 지식
ㄴ부족시, 솔루션을 열었지만, 외게어
ㄴ가장 중요한 능력
2.구현력
ㄴ본인이 생각한 알고리즘을 소스코드로 구현하는 과정
ㄴ부족시, 코딩화 시키지 못하겠다. 뭘하는 지 모르곘다. 10줄이 넘어가면 엄두가 안난다.
ㄴ’내가 어떤 프로그램을 만들고자 하는지’ 명확하게
3.문제해결능력(응용력)
ㄴ 알고 있는 알고리즘, 자료구조, 테크닉 등을 당면한 문제에 맞게 변형하여 적용
ㄴ부족시 접근방법은 모르나 솔루션을 열었을 때 아는 알고리즘,자료구조
ㄴ중위권>상위권 벽을 뚫는 느낌으로 노력이 필요한 시점
코딩테스트 = 기초적인 배경지식+구현력
느낀것 :
알고리즘 풀이에 있어서 그냥 생각나는 규칙들을 차례 하면 되지 개념이 필요한가? 하고 생각했다가..
개념이라는 것은 단어를 알아야 비로소 느끼는 것을 표현할 수 있듯, 단어를 많이 아는 것은 표현과 사고를 확장 시켜주기 때문에, 길을 넓히기 위해 필요한 것이라 필요성을 인식.
다만, 수학 문제를 풀 때의 함수라 여겨지는데.... 굳이 함수가 필요한가 싶을 때도 있어 의아하지만 대화를 통해 같은 개념을 공유하는 사람에게 전하고자 하는 바를 전할 때에도 간결하게 전달할 수 있기 때문에 그에도 필요하다고 생각했다.
내게 아쉬웠던 것 :
숙제들을 직접 풀어보겠노라 시간을 너무 소요한 것. 우선 부족한 배경지식 부터 쌓는 것이 가장 필요할 것 같다. 그 다음은 체화.
내일 할 일 :
4주차 마저 보고 알고리즘