일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 킥스타트
- 딥러닝
- PYTHON
- 알고리즘
- 파이썬
- DFS
- 백준
- 코딩
- 프로그래밍
- dp
- kick start
- OS
- 네트워크
- google coding competition
- 코딩테스트
- 코딩 테스트
- 순열
- 브루트포스
- CSS
- 그래프
- 동적프로그래밍
- linux
- 동적 프로그래밍
- nlp
- 프로그래머스
- BFS
- AI
- 리눅스
- 운영체제
- 구글 킥스타트
- Today
- Total
목록정렬 (6)
오뚝이개발자
문제 https://leetcode.com/problems/3sum/ 3Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 나의 풀이 리트코드 풀이를 하다가 굉장히 재미있는 문제가 있어 가져와봤다. 문제는 간단하다. 리스트와 타겟이 주어지면 그 리스트의 3개의 원소의 합이 타겟과 같아지는 그룹을 return하는 문제다. 여기서 포인트는 단순히 3중 for문으로 구현하면 시간초과가 난다는 것이다. 다른 방법을 고안해야 하는데 그 풀이가 굉장히 흥미롭다. tw..

linked list를 정렬하는데 추가적인 메모리를 쓰지 않고 O(nlogn)의 시간복잡도로 하기 위해선 어떻게 해야할까? 답은 merge sort를 쓰면 된다!!!! 그런데 조금 복잡한 부분이 일반적인 array의 경우 index로 분할하여 정렬하면 되는데 linked list의 경우 어떻게 나누어야 하는지이다. 이를 위해선 3개의 포인터를 쓰면 된다. 그 세 포인터를 각각 p,slow,fast라 해보자. p,slow,fast가 차례로 한 칸씩 전진하는데 p->slow->fast의 순서대로 나아간다. 이 때, fast가 None이거나 fast.next가 None이 되면 p.next를 None으로 만들어주고 p와 slow로 linked list를 분할한다. 그럼 p가 가리키는 연결리스트가 l이 되고, s..
정렬 방법 중 가장 빠른 것은 O(nlogn)의 시간복잡도를 갖는다고 생각할 수 있다. 하지만 이보다 빠른 O(n)의 시간복잡도를 갖는 정렬방법도 있다. 바로 계수 정렬 다른 말로, 카운팅 정렬이다. 하지만 이러한 계수 정렬은 약간 제한된 조건 하에서 사용가능하다. 1 5 2 3 2 5 1 4 4 2 5 1 위와 같은 수가 나열되어있고 이를 정렬해보자. 그런데 자세히 보면, 위에서 등장하는 수의 범위가 1~5까지라는 것을 알 수 있다. 이처럼 수의 범위가 정해져 있는 경우 계수 정렬을 사용하면 효율적으로 정렬할 수 있다. 카운팅 정렬이란 말 그대로 수가 등장하는 횟수를 카운트 하는 것이다. 카운팅이 다 끝나면 크기 순서대로, 해당 수가 등장하는 횟수만큼 print해주면 된다. 위의 경우, 등장하는 수를 ..

Sorting Bubble sort Selection sort Insertion sort Shell sort Quick sort Merge sort(분할->병합정렬) Heap sort 각 sorting 알고리즘의 시간복잡도는? Bubble - O(n^2) Selection - O(n^2) Insertion - O(n^2) Shell sort Quick sort worst : O(n^2) best : O(nlogn) avg : O(nlogn) Merge sort Heap sort Searching Linear search는 언제 쓰면 좋은가? item이 sorted 되어있지 않거나 unsortable할 때 Linear search의 단점? 찾는 아이템이 없거나 뒤쪽에 있는 경우 비효율적 Binary sea..
파이썬의 sorted()는 정렬 조건을 설정해줄 수 있다. 여러 개의 요소를 갖는 튜플을 원소로 갖는 리스트라면 두 번째 요소값을 기준으로 정렬한다던가 혹은 lambda 함수를 이용하면 다중 조건으로 설정해줄 수도 있다. a = [(4,0), (4,3), (4,2), (3,2), (2,1), (1,0)] # 인자 없이 sorted()를 사용하면 리스트 아이템의 각 요소 순서대로 정렬 # 첫 번째 요소가 같으면 두 번째 요소로 비교 b = sorted(a) print(b) # [(1, 0), (2, 1), (3, 2), (4, 0), (4, 2), (4, 3)] # key인자에 lambda 함수를 넘겨주면 반환값을 가지고 비교해 정렬 # 이 때, key로 전달되지 않은 요소에 대해선 정렬하지 않음 c = ..
파이썬에서 리스트를 정렬해야하는 경우가 많다. 이 때 사용할 수 있는게 .sort()와 sorted()이다. 여기선 sort()와 sorted()의 차이 그리고 오름차순, 내림차순으로 정렬하는 방법을 살펴보자. sort()와 sorted() a = [1, 5, 3, 8, 4] a.sort() print(a) # [1, 3, 4, 5, 8] b = [1, 5, 3, 8, 4] print(sorted(b)) # [1, 3, 4, 5, 8] print(b) # [1, 5, 3, 8, 4] sort()는 리스트형의 메소드이고, sorted()는 파이썬 내장함수이다. a.sort()라고 했을 때 원래의 리스트 a의 결과가 정렬된 형태도 변경되어 저장된 것을 알 수 있다. 이에 반해, sorted(b)의 경우 리스..