알고리즘 공부💥/본연의 알고리듬 8

[알고리듬] JS 기본 Method 복습하기

// 형변환 Boolean() Number() String() Array() Object() RegExp() Map() Set()​ // n진수의 x값을 10진수의 숫자로 변환해준것 parseInt(x값, n진수) parseInt('100', 10) -> 100 parseInt('100', 16) -> 256 parseInt('100', 8) -> 64 parseInt('100', 2) -> 4 // 굳이 슬라이싱 안해도됨 숫자스러운 애들만 빼줌 parseint('100asdfawe', 10) -> 100 // 유사품 : parseFloat() // array 관련 메소드 let arr = [10, 2, 3, 22, 33, 100, 11] let arr2 = [12, 13] // 이어붙이고 return ..

[알고리듬] python 기본 method 복습하기

# max, min max([1,2,3,4]) 4 min([1,2,3,4]) 1​ # 리스트의 내장메서드 검색하기 dir([1,2,3,4]) # 'append' # 'clear' # 'copy' # 'count' # 'extend' # 'index' # 'insert' # 'pop' # 'remove' # 'reverse' # 'sort' # filter, lambda list(filter(lambda x: x % 2 == 0, range(20))) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] # 리스트 형식 [i for i in range(20) if i % 2 == 0] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] # map map(function, value)..

[알고리듬] 파이썬 함수 lambda

람다함수란 ? 일반함수를 굳이 def ~ return으로 선언하지 않고 가볍게 만들 수 있는 연산함수 # 예를 들어 def is_even(x): if x % 2 == 0: return True return False # 아래처럼 람다함수로 변환 가능 is_even = lambda x : x % 2 == 0 # 사용 법은 둘 다 is_even(1) is_even(2) ... lambda & map함수 람다함수는 map함수랑 짝지어서 자주 사용됨 ! map함수는 리스트나, 튜플에 어떠한 처리를 할 때 사용하는 함수로 map(함수, 리스트) 식으로 첫번째 인자에는 함수, 두번째 인자에는 리스트(or튜플)를 받음 # 흔히 공백으로 이루어진 숫자리스트를 인풋 받을 때 아래와 같이 받는데 number_list = ..

[알고리듬] 파이썬 라이브러리 deque

데크(deque)는 양방향 큐이다. 양쪽 방향에서 요소를 추가하거나 제거할 수 있다. 즉 일반적인 리스트의 경우 pop()보다 pop(0)을 할 경우 메모리 사용량이 늘어난다. 그 이유는 pop(0)의 경우 pop(0)을 하고 리스트를 맨 끝부터 앞으로 한 칸 씩 이동시키는 작업을 하기 때문이다. 그런데 deque는 양방향 큐니깐 pop(0)이나 pop()이나 똑같다는 뜻! 즉 deque를 쓸 경우 확률상 양 끝 엘리먼트의 append와 pop이 압도적으로 빠르다. 심지어 사용법도 쉬움.. 앞으로 deque에 익숙해지도록 하자 from collections import deque deq = deque() # 리스트 맨 앞에 요소 추가 deq.appendleft('요소') # 리스트 뒤에 요소 추가 (일반..

[알고리듬] 파이썬 라이브러리 defaultdict

A라는 딕셔너리를 선언하고 key값으로 접근했을 때 만약 A[key]가 처음 접근된 친구면 **KeyError**를 일으킨다! 그래서 특히 dict에 value값으로 리스트를 삼을때 리스트가 처음 추가되는지 아닌지 if / else로 분기처리를 해준다. defaultdict는 그러한 수고로움을 덜어준다. 처음 접근되는 key일지라도 기본적으로 제공되는 기본값이 존재하기 때문! from collections import defaultdict defaultdict(list) 기본 값으로 빈 리스트 []를 제공 -> 처음 접근하는 key값이어도 A[key].append('블라블라') 가능! defaultdict(int) 기본 값으로 숫자 0 제공 defaultdict(set) 기본 값으로 빈 set 제공 my..

[알고리듬] 파이썬 라이브러리 Counter

무시무시한 친구를 알아버렸다. 리스트의 요소 갯수를 바로 알아버리는 친구다.😱 사용법은 아래와 같다. 심지어 쉬움! Counter라는 라이브러리에 리스트를 넣어서 반환값을 print해보면 dict 형태로 요소마다 카운팅을하여 출력됨을 알 수 있다! from collections import Counter a = [1,1,1,2,3,4,5,5,5,6,7,8,8,8,8] c = Counter(a) print(c) # Counter({8: 4, 1: 3, 5: 3, 2: 1, 3: 1, 4: 1, 6: 1, 7: 1}) for i in c: print('중복없이', i) print('------') # 마치 set함수에 넣은 듯한 느낌으로 중복없이 출력 할수도 있다. # 중복없이 1 # ------ # 중복없..

[알고리듬] 플로이드-워셜 알고리즘 / python

모든 최단 경로를 구하는 알고리즘 노드 간의 최단 경로를 입려겨한 2차원 행렬을 구성한다. 경유지를 설정하고. 각 시행마다 새로운 경유지로 교체해가며, 기존의 출발->도착 경로와 출발->new경유지->도착의 경로를 비교하여 더 짧은 경로를 선택한다. n = 6 fares = [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] # n : 노드의 수 # fares : 출발, 도착, 요금의 정보가 주어진다고 했을 때 INF = 1e10 # 충분히 큰 수 # dist -> x에서 y로 가는 운임 나타내는 2차원 요금지도 dist = [[INF for _ in range(n..

[알고리듬] Array / 퀵소트 / python

🤔퀵소트란 ? 불안정 정렬에 속하며, 다른 원소와의 비교만으로 정렬하는 비교 정렬에 속한다. 분할과 정복 알고리즘으로, 평균적으로 가장 빠른 수행 속도를 자랑하는 정렬방법이다. 머지소트와 달리 퀵소트는 리스트를 비균등하게 분할한다. 분할과 정복 방법을 이용한다. 문제를 해결하기 쉬운 작은 문제들로 나누고 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 방법이다. 😲퀵소트 알고리즘 진행 순서 리스트 안에 있는 한 요소를 선택한다. (랜덤으로 선택하는 방법, 가운데 인덱스를 선택하는 방법, 가장 오른쪽 인덱스를 선택하는 방법 등이 있다.) 이렇게 고른 원소를 pivot 이라고 한다. pivot을 기준으로 pivot보다 작은 요소들은 모두 pivot의 왼쪽으로 옮겨지고 pivot보다 큰 요소들은 모두 pi..