분류 전체보기
-
[Python] 함수 및 코드 실행시간 측정하기 (timeit 모듈 사용법)언어/파이썬 & 장고 2019. 10. 5. 23:24
파이썬에서는 timeit 모듈을 제공하고 있고 이 모듈을 사용하여 특정 프로젝트의 전체 실행시간이 아닌 특정 함수나 코드의 실행시간을 측정하는 방법을 소개합니다.timeit.timeit()timeit.timeit(stmt='pass', setup='pass', timer=, number=1000000, globals=None)timeit 함수의 파라미터는 아래와 같습니다.stmt: 실행측정할 코드 및 함수setup: stmt를 실행하기 위해 사전에 필요한 코드나 함수를 선언. setup의 실행 시간은 전체 측정 실행 시간에서 제외됨timer: Timer 인스턴스number: 선언한 stmt의 수행 횟수. 선언하지 않으면 기본값으로 1000000번이 실행됨예제먼저 사용 방법 예제는 아래와 같습니다.impo..
-
[Python] 소인수 분해, 약수 구하기언어/파이썬 & 장고 2019. 9. 29. 17:07
소인수 분해소인수 분해를 하기 위해선 이전에 정리한 에라토스테네스의 체 방식을 사용한 소수 구하기를 사용하여 변형하는 것이 좋습니다. (https://brownbears.tistory.com/445) 아래는 특정 값이 주어졌을 때, 소인수 분해를 한 예시입니다.import math def get_primes(n): # 구하고자 하는 수만큼 True를 갖는 리스트 생성 is_primes = [True] * n # n의 최대 약수가 sqrt(n) 이하이므로 계산한 후, 소숫점이 있을 경우 올림으로 최대 반복 횟수 계산 max_length = math.ceil(math.sqrt(n)) for i in range(2, max_length): # True일 경우, 소수 if is_primes[i]: # i이후 i..
-
[Python] 최대공약수, 최소공배수, N개의 최소공배수언어/파이썬 & 장고 2019. 9. 22. 22:33
최대공약수 (Greatest Common Divisor)최대공약수는 주어진 두 수 x, y에서 x의 약수이면서 y의 약수인 수 중 최대값을 의미합니다. 최대공약수를 구하는 간단한 방법은 1에서 x와 y 중 작은 값의 범위에서 공약수(둘 모두 나머지가 0)를 모두 구한 다음 이 수들 중 최대값을 구하는 방법입니다. 1부터 x 또는 y 중 작은 값까지 반복하며 값을 구할 수 있지만 유클리드 호제법(Euclidean algorithm)을 이용하면 간단하게 계산이 됩니다.유클리드 호제법의 공식은 다음과 같습니다.최대공약수를 구하는 함수를 gcd(x,y)라고 가정x % y = 0이라면 gcd(x, y) = y가 성립x % y != 0이라면 gcd(x, y) = gcd(x, x % y)가 성립2번이 될 때까지 2~..
-
[Python] 순열, 조합, 곱집합언어/파이썬 & 장고 2019. 9. 21. 22:54
파이썬에서는 순열, 조합, 곱집합 기능을 내장함수로 제공하고 있습니다.순열 (Permutation)순열이란 순서를 정해서 나열한 것을 말합니다.nPr로 표시하며 n * (n-1) * (n-2) * ... * (n-r+1) 로 계산됩니다. 예를 들어, 1,2,3의 숫자가 적힌 카드가 있을 때, 이 중 두 장을 꺼내는 경우의 수(여기서 뽑힌 카드의 결과에 대해서 순서를 보장)를 구한다고 할 때, 코딩을 직접 해야 하지만 파이썬에서는 이를 직접 코딩할 필요없이 아래와 같은 기능을 제공해주고 있습니다.from itertools import permutations lists = [1,2,3] a = list(permutations(lists, 2)) print(list(a)) # 결과 # [(1, 2), (1, ..
-
[Python] 리스트 slice, pop, del 성능 비교 및 사용방법언어/파이썬 & 장고 2019. 9. 21. 22:24
slice, pop, del 사용방법remove()remove()는 지우고자 하는 인덱스가 아닌, 값을 입력하는 방식입니다. 만약 지우고자 하는 값이 리스트 내에 2개 이상이 있다면 순서상 가장 앞에 있는 값을 지우게 됩니다. 해당 값을 삭제 후, 리스트를 재조정합니다.a = [1,2,1,3,4,5,1] a.remove(1) print(a) print(a[0]) # [2, 1, 3, 4, 5, 1] # 2pop() , delpop()과 del은 지우고자 하는 리스트의 인덱스를 받아서 지우는 방식입니다. 두 개의 차이는 pop()은 지워진 인덱스의 값을 반환하지만 del은 반환하지 않습니다. 이 차이 때문에 미세하게 del이 pop()보다 수행속도가 더 빠릅니다. 또한 remove()와 동일하게 pop()..
-
SOP, JSONP란?웹 2019. 9. 13. 20:47
SOP란?자바스크립트는 서로 다른 도메인에 대한 요청을 보안상 제한하는데, 이 정책을 Same-Origin Policy, 즉 SOP라고 합니다. SOP 정책으로 인해 생기는 이슈를 크로스 도메인 이슈(Cross-domain issue)라고 하는데 JSONP는 이 이슈를 우회해서 데이터 공유를 가능하게끔 합니다.JSONP(JSON with Padding 또는 JSON-P)란?JSONP란 CORS가 활성화 되기 이전의 데이터 요청 방법으로, 다른 도메인으로부터 데이터를 가져오기 위해 사용하는 방법입니다. SOP에 따라 다른 도메인 간의 request를 제한하지만 JSONP는 보안상 이슈로 인하여 현재는 거의 사용하지 않는 기술입니다. W3C에서 채택된 CORS 방식의 HTTP 통신을 사용하여 크로스 도메인 ..
-
GraphQL이란?웹 2019. 9. 13. 20:07
GraphQL은 facebook에서 만든 Graph Query Language로 어플리케이션 레이어 쿼리 언어입니다. 다시 말해서 API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임입니다. GraphQL은 특정한 데이터베이스나 스토리지에 귀속되어 있지 않으며 기존 코드와 데이터에 의해 대체됩니다.GraphQL은 기존에 사용하고 있는 REST API의 한계점을 극복하고자 나온 통신 규약으로 REST API를 대체할 수 있습니다. 아래에서 REST API의 한계점과 GraphQL이 무엇인지 설명합니다.REST API의 한계REST API의 개념을 간단하게 말하자면 모든 Resource들을 하나의 Endpoint에 연결하고 연결된 Endpoint는 Resource와 관련된 내..
-
[Python] 행렬의 곱셈언어/파이썬 & 장고 2019. 9. 12. 21:55
먼저 행렬을 곱하기 위해서는 앞 행렬의 열의 수와 뒤 행렬의 행의 수가 같아야 됩니다. 이러한 조건이 맞다면 행렬의 곱셈의 결과 크기는 (앞 행렬의 행의 수)×(뒤 행렬의 열의 수)가 됩니다. 즉, 앞 행렬이 m X n 이고 뒤 행렬이 n X r 인 경우 곱은 m X r 크기의 행렬이 됩니다.예를 들어, 2x2 행렬의 곱은 아래와 같습니다.이를 식으로 표현하면 아래와 같습니다.따라서 행렬의 곱셈의 복잡도는 O(n^3)입니다.아래는 복잡도 O(n^3)의 행렬의 곱셈을 구하는 파이썬 코드입니다.def solution(arr1, arr2): answer = [] for i in range(0, len(arr1)): temp_row = [] for j in range(0, len(arr2[0])): value ..
-
[Postman] Mock Server / API Documentation 만들기IDE & 에디터 2019. 9. 12. 20:45
예전부터 postman을 사용하여 만든 api를 호출하고 테스트 해왔는데 생각보다 기능들이 많고 손쉽게 만들 수 있어서 아래와 같이 정리를 합니다. 여기서 설명할 내용은 mock server와 api 문서를 만드는 방법입니다. mock server를 만들면서 api 문서화를 같이 진행할 수 있고 그 반대의 경우도 가능하므로 개발자에게 아주 편리한 기능을 제공합니다.1. Mock server 생성하기이미지의 좌측 상단에 있는 New 버튼을 누르면 팝업이 뜨는데 여기서 Mock Server를 눌러줍니다. 누르면 다음 화면이 위와 같이 나오는데 Request Path 부분에 경로를 입력하면 우측 하단의 Next가 활성화가 됩니다. 위에서 지정한 Request Path는 나중에 수정이 가능하므로 일단 test라..
-
[Django] Custom order by 정의하기언어/파이썬 & 장고 2019. 9. 12. 19:42
이전에 PostgreSQL에서 사용자가 원하는 정렬을 하는 로직을 정리했습니다. (https://brownbears.tistory.com/384) 여기서는 Djago ORM을 이용하여 사용자가 원하는 order by를 하는 방법을 설명합니다. PostgreSQL 9.5 이상의 버전이라면 array_position 을 사용해 손쉽게 사용자가 원하는 정렬을 할 수 있지만 Django ORM은 해당 기능을 지원하지 않기 때문에 Case문을 사용해 정의합니다.from django.db.models import Case, Q # 아래의 pk 순서대로 정렬하고자 함 pk_list = [2, 10, 1] preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumera..