일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 스파르타내일배움캠프
- 코딩테스트
- 리그오브레전드
- Django
- programmers
- 그리디알고리즘
- 프로그래머스
- java
- drf
- API
- greedy
- github
- 탐욕알고리즘
- 파이썬
- 자바
- 장고
- lol
- 알고리즘
- 롤
- 코딩테스트준비
- SQL
- 백준
- 라이엇
- 스파르타내일배움캠프TIL
- 그리디
- python
- git
- Riot
- 내일배움캠프
- sort
- Today
- Total
목록분류 전체보기 (121)
Lina's Toolbox
동적 계획법(Dynamic Programming)한번 계산한 것은 적어두고, 다시 계산하지 말고 재사용하자!동적 계획법(Dynamic Programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다.이것은 부분 문제 반복과 최적 부분 구조를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. 르탄이는 매일 회사로 출근을 합니다.그래서 출근하는 방법을 어떻게해야 가장 효율적인지를 알고 싶습니다.집 - 봉천역 - 삼성역 - 코엑스 까지 걸어가는 길인데,각각의 목적지까지 이동하는 방법은 지하철, 버스, 따릉이, 공유 킥보드가 있습니다.그래서 다음과 같이 매일 실험해봤습니다.1일 : 지하철(15분) - 지하철(20분) - 지하철(3분)2일 : 지하철(..
최단경로보통 A에서 B로 가는 최소 비용을 의미그래프로 표현. 각 지점은 노드, 도로는 간선.다익스트라, 플로이드-워셜을 배울 예정.지도 앱에서 광범위하게 사용다익스트라 알고리즘튜링상 수상 등, 위대한 아저씨: https://ko.wikipedia.org/wiki/에츠허르_데이크스트라대표작은 다익스트라 알고리즘, 구조적 프로그래밍.그 중에서 다익스트라 알고리즘을 배워보겠습니다.인접노드: 지금 노드에서 바로 갈 수 있는 노드더 작은 비용을 가진 노드에서 부터 다시 검색하여 계산출발점이 정해져있을때, 나머지 모든 노드에 다르는 최소 비용을 계산하는 알고리즘1. 출발지를 s로 정하고, 다음과 같이 표시한다. (s, t, x, y, z 순)거리 = [0, inf, ..
이진검색https://leetcode.com/problems/binary-search/description/정렬된 배열을 받는다.그 배열에 n이 존재한다면 n의 위치를,n이 존재하지 않는다면 -1를 return 한다. 구현def binary_search(nums, target): def bs(start, end): if start > end: return -1 mid = (start + end) // 2 if nums[mid] target: return bs(start, mid - 1) else: return mid return bs(0, len(nums) - 1)assert bina..
버블 정렬(Bubblesort)계속 한자리 옆의 자료와 비교하면서, 순서가 맞으면 두고, 다르면 교환하는 방식가장 쉽고 직관적인 버블 정렬! 버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, … 이런 식으로 (마지막-1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬하는 방식입니다!작은 숫자, 큰 숫자 순서로 있으면 내버려두고 큰 숫자, 작은 숫자 순서로 있으면 둘의 위치를 변경하시면 됩니다! [4, 6, 2, 9, 1] # 정렬되지 않은 배열1단계 : [4, 6, 2, 9, 1] 4와 6을 비교합니다! 4 2 이므로 둘을 변경합니다! [4, 2, 6, 9, 1] 이렇게요!3단계 : [4, 2, 6..
트리트리는 그래프의 한 종류!트리의 조건으로는, 사이클이 없어야 한다(순환 구조를 가지면 안됨).또한, 한개의 부모만 가져야 한다. (부모가 한개 초과인 이상 그 것은 그냥 그래프, 트리아님)[1, [2, [3]]] ➡️ 트리 ➡️ 레이어가 존재해야 트리임![1, 2, 3] ➡️ 리스트 트리의 종류이진트리: 자식 노드를 최대 2개 가질 수 있는 트리포화 이진 트리: 모든 깊이가 포화 상태인 이진트리 (자식이 없거나 2개 있어야함)완전 이진 트리: 노드 수가 n 개일 때, 1번부터 n개까지 노드가 있는 이진트리 (왼쪽부터 자식이 있어야함)편향 이진 트리: 한쪽 방향으로만 자식이 있는 트리완전 이진 트리트리 구조를 표현하는 방법은 직접 클래스를 구현해서 사용하는 방법이 있고, 배열로 표현하는 방법이 있..
DFS, BFS 관련 내용은 이전 포스팅 참조https://kimwoolina.tistory.com/33 자료구조 - 트리, DFS(깊이우선탐색), BFS(넓이우선탐색)트리연결되어 있는 정점와 정점간의 관계를 표현할 수 있는 자료구조. 자료구조는 크게 비선형구조, 선형구조로 구분됩니다. 선형구조(리스트,스택,큐)는 자료를 저장하고 꺼내는 것에 초점이kimwoolina.tistory.com 백트래킹필요없는 경우를 가지치기(pruning)함으로써 시간복잡도를 줄이는 방법DFS, BFS와 같은 완전탐색 기법들을 더 효율적으로 할 수 있게 만들어주는 기법! 사실 모든 문제에서 완전 탐색을 하는 것은 쉽지 않다. ➡️ 필요한 경우의 수만 확인하는 백트래킹 사용 N-Queen 문제https://leetcode.c..
재귀 함수(Recursion Function)함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식 예제. 팩토리얼 시간복잡도: O(n)공간복잡도는 for문을 사용하는 경우가 더 낫지만,재귀함수가 가독성이 훨씬 좋다. # 내 코드!def factorial(i): if i == 0: return 1 result = i * factorial(i-1) return resultdef solution(n): for i in range(1, 3628800): # while factorial(i) n: break return i-1 def factorial(i): if i == 0: return 1 return i * soluti..
트리연결되어 있는 정점와 정점간의 관계를 표현할 수 있는 자료구조. 자료구조는 크게 비선형구조, 선형구조로 구분됩니다. 선형구조(리스트,스택,큐)는 자료를 저장하고 꺼내는 것에 초점이 맞춰져 있고,비선형구조는 표현에 초점이 맞춰져 있습니다. 이번 자료구조인 그래프는 바로 연결 관계에 초점이 맞춰져 있습니다. 페이스북을 예시로 들어볼게요! 제가 친구 "제니"를 알고 있고, "로제"와 친합니다.그리고 "로제"는 트와이스 "사나"를 안다고 하면, 저는 "사나"와 2촌 관계라고 말할 수 있겠죠! 로제 - 사나 ⎜ 제니 - 르탄르탄이는 연결 관계를 가진 데이터, 노드입니다!르탄과 제니는 간선으로 연결되어 있습니다.르탄과 로제는 인접 노드 입니다! ..
어레이 vs. 연결리스트Array는 애초에 공간을 이미 다 만든다! 나 n 개 만들거야 ➡️ 메모리에 주소 n개 할당함. 바뀔 수 없음만약 메모리를 더 넣고싶으면(ex. 그림에서는 10번째부터, 메모리를 더 할당하여 넣는다.)n번째 데이터가 보고싶다면 굳이 하나씩 체크할 필요 없이, A[n]으로 바로 확인 가능하다.Linked List는 4번째에 접근하고 싶다면 바로 갈 수 없다. 0번째 > 1번째 > ... > 4번째로 가야한다.어레이: 접근 쉬움, 삽입 어려움.연결리스트: 직접 구현. 접근 어려움, 삽입 쉬움. 💡 파이썬에서 리스트는 Java의 ArrayList 와 매우 유사한 동적 배열(dynamically resizable array)의 개념을 기반으로 구현되어 있습니다.동적 배열은 기본적으로 ..
힙(Heap)데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) //왼쪽부터 쭉쭉 채움! 항상 최대/최소의 값들이 필요한 연산이 있다면? 바로 힙을 쓰면 되겠죠! 힙을 구현하려면 어떻게 해야할까요? 힙은 항상 큰 값이 상위 레벨에 있고 작은 값이 하위 레벨에 있도록 하는 자료구조입니다. 다시 말하면 부모 노드의 값이 자식 노드의 값보다 항상 커야 합니다. 그러면 가장 큰 값은 모든 자식보다 커야 하기 때문에 가장 위로 가겠죠! 따라서 최대의 값들을 빠르게 구할 수 있게 되는 것입니다. 8 Level 0 6 3 Level 1 2 1 Level 2 # -> 이진 트리 O 완전 이진 트리 X 이므로 힙이..