일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 항해99
- Python
- JavaScript
- maeil-mail
- redux
- redux-toolkit
- json-server
- 리액트
- Get
- sw expert academy
- C++
- 알고리즘
- react-redux
- 코딩테스트합격자되기
- react
- createSlice
- 프로그래머스
- useDispatch
- react-router
- programmers
- Algorithm
- java
- axios
- 자바
- 항해플러스
- 테코테코
- 이코테
- 매일메일
- SW
- redux-saga
- Today
- Total
목록Algorithm (68)
Binary Journey
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/RjCfd/btrtlUD5vmt/Nh9yJurVKKW2DFAcOuJPy0/img.png)
* 선택정렬 - 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾼다 * n result = [] def selection_sort1(data): if len(data) > 1: n = data[0] m = data[1:] temp = min(m) index = 0 if n > min(m): index = m.index(temp) m[index] = n result.append(temp) else: result.append(n) return selection_sort1(m) else: result.append(data[0]) def selection_sort2(array): for i in range(len(array)): min_index = i for j in rang..
* DFS def dfs(graph, v, visited): visited[v] = True print(v) for i in graph[v]: if not visited[i]: dfs(graph, i, visited) graph = [ [], [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3, 4], [7], [2, 6, 8], [1, 7] ] visited = [ False for i in range(9) ] dfs(graph, 1, visited) * BFS from collections import deque def bfs(graph, start, visited): queue = deque([start]) visited[start] = True while queue: v = ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ptztP/btrsTdDO2FE/h4AHYLtq98AGAHVQpIJZd1/img.png)
graph = [] n, m = map(int, "4 5".split()) example = [ "00110", "00011", "11111", "00000" ] for i in example: graph.append(list(map(int, str(i)))) def dfs(i, j): if i = n or j = m: return False if graph[i][j] == 0: graph[i][j] = 1 dfs(i - 1, j) dfs(i + 1, j) dfs(i, j - 1) dfs(i, j + 1) return True return False result = 0 for i in range(n): for j in range(m): if dfs(i, j): result += 1 print(result..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/qokwQ/btrpQXDZmcG/3WyMpZK5zbLTHpHObOR2S0/img.png)
* 상하좌우 n = int(input()) a = input().split() _dict = { 'R': (0, 1), 'L': (0. -1), 'U': (-1, 0), 'D': (1, 0) } location_v = 1 location_h = 1 while a: direction = a.pop(0) if direction == 'R' and location_h == n: pass elif direction == 'L' and location_h == 1: pass elif direction == 'U' and location_v == 1: pass elif direction == 'D' and location_v == n: pass else: location_v += _dict[direction][0]..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bxCCfG/btror1Inlp9/4bKpEjIxDIRKkOJ9uSEWy1/img.png)
강의 듣다가 필요한 부분은 메모를 하려 한다. * 그리디 알고리즘에서 본 식인데 처음에 생각한 식이 모든 수를 탐색해서 -1을 한 뒤 결과를 도출해내는 방식이었다. 근데 그러면 시간 복잡도가 O(K) 인데 시간복잡도를 O(logK) 로 바꿀 수 있는 식이라 해서 메모한다. (target 은 n을 k로 나눈 몫 * k 로 나머지 없는 수다.) n, k = map(int, input().split()) result = 0 while n >= k: target = (n // k) * k result += (n - target) n = target result += 1 n //= k result += (n - 1) print(result) * 곱하기 혹은 더하기 data = map(int, str(input()..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/TQqRH/btrnGjJ2Yft/EAo7bHkkQlj6kXAVwktJF0/img.png)
영상: https://youtu.be/m-9pAwq1o3w * 시간복잡도까지 나와서 알아두면 좋을 거 같아 캡쳐해옴 + 파이썬에서는 removeAll을 제공하지 않아 removeAll을 사용하고 싶다면 사용자함수를 따로 만들어야 함 * 튜블은 리스트와 비슷하게 생겼으나 변수 재할당 불가능, 인덱스별 원소 할당 불가능 * 리스트보다 메모리 소비가 적음 * python의 dict에서 keys, values 는 javascript의 Object.keys(객체), Object.values(객체) 랑 비슷 * 집합 자료형 참고사항 # unpacking a, b, c = input().split() # packing import sys # 문자열 입력받기 data = sys.stdin.readlin().rstrip..
당장 눈 앞의 최적의 상황만을 좇는 알고리즘, 어느 조건에서는 최적의 해 보장 def greedy(n): result = 0 result += int(n / 500) n %= 500 result += int(n / 100) n %= 100 result += int(n / 50) n %= 50 result += int(n / 10) print(result) if __name__ == "__main__": n = int(input()) greedy(n) def greedy(n): result = 0 div, mod = divmod(n, 500) result += div n = mod div, mod = divmod(n, 100) result += div n = mod div, mod = divmod(n, 5..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bkIBHR/btrmyjKzltA/iock8kQXHFKjxTJ6B49u5k/img.png)
35강에 대한 리뷰 일반적인 경우 빠르게 작동하며 간단한 구조를 가진 문자열 매칭 알고리즘이다. 해시 기법을 이용하여 단순 해시 알고리즘의 경우 연산 속도가 O(1)에 달한다. 동일한 해시값이 발생하는 이른바 충돌이 발생할 수도 있는데 발생률이 낮아 무시하고 지나간다. 보통 공식은 긴 글 해시값 = 2 * (긴 글 해시값 - 가장 앞 문자의 값) + 새롭게 들어온 문자의 값 def find_string(parent, pattern): parent_len = len(parent) pattern_len = len(pattern) parent_hash = 0 pattern_hash = 0 power = 1 for i in range(parent_len - pattern_len + 1): if i == 0: f..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cdN7ap/btrlV1E0GDf/qLWNPcfNogCrVbeVnhLZQ0/img.png)
34강에 대한 리뷰 https://www.inflearn.com/course/algorithm-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A4%EC%8A%B5/lecture/12363 알고리즘의 개요와 실습 환경 구축 - 인프런 | 학습 페이지 지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요.... www.inflearn.com 대표적인 문자열 매칭 알고리즘 모든 경우를 비교하지 않아도 부분 문자열을 찾아줌 접두사와 접미사의 개념을 활용함: 접두사와 접미사가 일치하는 최대 길이를 구함 ** Python def make_table(pattern): pattern_len = len(pattern) table = [0 for i in r..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b5PlMw/btrlOWcKjIA/OMrNRwSQ0IxszfglhikpT1/img.png)
33강에 대한 리뷰 https://www.inflearn.com/course/algorithm-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8B%A4%EC%8A%B5/lecture/12362 알고리즘의 개요와 실습 환경 구축 - 인프런 | 학습 페이지 지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요.... www.inflearn.com 하나 씩 확인하는 가장 단순한 알고리즘 단순히 모든 위치에서 모든 문자열이 같은지 확인하므로 O(N*M)의 시간복잡도를 가짐 효율적이진 않음 ** Python def find_string(parent, pattern): parent_len = len(parent) pattern_len = len(patter..