Python
-
[python] 우선순위 큐 알고리즘 - heapq 모듈Python 2020. 10. 6. 16:40
heap ? 완전 이진 트리를 기본으로 한 자료 구조 자료 구조 형태 중 하나로서 우선순위 큐를 위해 만들어진 구조이다. 코딩 테스트 문제 중 최소값, 최대값을 계속해서 호출해야 하는 경우 heap 구조를 이용하여 구현하면 시간 측면에서 효율적인 구현이 가능하다. heapq ? 우선순위 큐 알고리즘이라고 하는 힙(heap) 큐 알고리즘의 구현을 제공 파이썬의 리스트를 최소 힙처럼 사용할 수 있게 하는 것 import heapq는 내장모듈로서 따로 설치가 필요하지 않다. import heapq Function heapify() 기존 배열(리스트)을 heap 구조로 만들기 my_heap = [1, 3, 2, 6, 8, 0, 6] heapq.heapify(my_heap) print(my_heap) # [0, ..
-
[Python] 병합 정렬(merge sort)Algorithm 2020. 5. 15. 16:47
분할 정복 알고리즘 중 하나로 병합 정렬(merge sort) 또는 합병 정렬이라고 부른다. 정렬되지 않은 전체 데이터를 하나의 단위로 분할한 후 분할한 데이터들을 다시 병합하면서 정렬하는 방식이다. 간단히 설명하자면, 큰 데이터를 하나의 작은 데이터로 쪼갠 후 정렬하면서 다시 합치는 것이다. 시간 복잡도는 O(n*logn)이다. 포인트 1. 분할: 배열이 하나의 원소가 될때 까지 절반으로 나눈다. 2. 병합: 분할된 각각의 원소를 비교하여 정렬된 배열을 만든다. Python Code def mergesplit(data): if len(data) left_point and len(right) > right_point: if left[left_point] > right[right_point]: merged..
-
[Python] 백준 1302번 베스트셀러Algorithm 2020. 5. 14. 22:07
가장 빈도가 높은 문자열 출력하기 포인트! collections 모듈을 사용하여 알고리즘을 구현하였다. from collections import Counter collections에 있는 Counter를 이용하여 각 데이터 마다의 빈도를 구하고 ex) Counter({'top': 4, 'kimtop': 1}) most_common()을 이용하여 데이터의 개수가 많은 순의 리스트를 구하여 가장 빈도가 높은 문자열을 출력하였다. ex) [('top', 4), ('kimtop', 1)] Python Code from collections import Counter n = int(input()) books = [] for _ in range(n): books.append(input()) books.sort()..
-
[Python] 버블 정렬(Buble sort)Algorithm 2020. 3. 15. 20:06
Buble sort 두 인접한 데이터를 비교해서 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 정렬 알고리즘 특징 시간 복잡도가 O(n²)로 느리다. 코드가 단순하여 자주 사용된다. Python Code def bubleSort(data): for index in range(len(data) - 1): swap = False for idx in range(len(data) - index - 1): if data[idx] > data[idx+1]: data[idx], data[idx+1] = data[idx+1], data[idx] swap = True if swap == False: break return data buble sort 확인하기 import random data_list =..
-
[Django] Admin site 커스터마이즈 하기Web 2019. 12. 25. 17:27
Django의 장점 중에 하나인 관리자(admin) 페이지를 더 잘 사용하기 위해서 admin.py 를 커스터마이즈 해보자! 다양한 기능이 있지만 우선 내가 사용해본 것 위주로 작성했다. Django의 기본 사용과 model 작성 관련 부분은 생략했다. Model 등록하기 전 Model을 admin site에 등록하는 방법 첫번째 방법 기본 ModelAdmin을 이용해서 admin페이지에 등록한다. # admin.py from django.contrib import admin from .models import Paper admin.site.register(Paper) 두번째 방법 데코데이터를 이용하여 admin페이지에 등록한다. # admin.py from django.contrib import adm..
-
파이썬을 파이썬 답게_3Python 2019. 11. 29. 13:47
이전 글 보러 가기 2019/11/22 - [Python] - 파이썬을 파이썬답게_2 파이썬을 파이썬답게_2 이전글 보러가기 2019/09/30 - [Python] - 파이썬을 파이썬답게_1 파이썬을 파이썬답게_1 프로그래머스의 파이썬을 파이썬답게 라는 강의를 보고 정리한 글이다. 몪과 나머지 - divmod 두개의 수가 주어지고 몫과.. dev-lagom.tistory.com 프로그래머스의 파이썬을 파이썬답게 라는 강의를 보고 정리한 글이다. 순열과 조합 숫자를 담은 일차원 리스트로 만들 수 있는 순열을 모두 구하기(사전 순으로 정렬) 입력 [2, 1] [1, 2, 3] 출력 [[1, 2], [2, 1]] [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]..
-
링크드 리스트(Linked List)_1자료구조 2019. 11. 28. 16:38
구조 연결 리스트라고도 한다. 배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조이다. 링크드 리스트는 떨어진 곳에 존재하는 데이터를 연결해서 관리하는 데이터 구조이다. 본래 C언어에서는 주요한 데이터 구조이지만 파이썬은 리스트 타입이 링크드 리스트의 기능을 모두 지원한다. 기본 구조와 용어 노드(Node): 데이터 저장 단위(데이터값, 포인터)로 구성 포인터(Pointer): 각 노드 안에서 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간 간단한 링크드 리스트의 예시 Node 구현 보통 파이썬에서 링크드 리스트 구현시 파이썬 클래스를 활용한다. 파이썬 객체지향 문법에 대한 이해 필요! www.fun-coding.org 구현 class Node: def __init__(self, dat..
-
파이썬을 파이썬답게_2Python 2019. 11. 22. 10:06
이전글 보러가기 2019/09/30 - [Python] - 파이썬을 파이썬답게_1 파이썬을 파이썬답게_1 프로그래머스의 파이썬을 파이썬답게 라는 강의를 보고 정리한 글이다. 몪과 나머지 - divmod 두개의 수가 주어지고 몫과 나머지를 구해야 할때가 있다. ex) 7을 3으로 나눈 몫과 나머지 구하기 일반적으로 a = 7.. dev-lagom.tistory.com 프로그래머스의 파이썬을 파이썬답게 라는 강의를 보고 정리한 글이다. 원본을 유지한채 정렬된 리스트 구하기 - sorted 파이썬의 sort()함수를 사용하면 리스트의 원소를 정렬할 수 있다. sort함수는 원본의 순서를 변경 시킨다. deep copy와 sort 함수 이용 list1 = [4, 3, 2, 1] list2 = [i for i i..