분류 전체보기
[프로그래머스]8주차_최소직사각형 - 위클리 챌린지
https://programmers.co.kr/learn/courses/30/lessons/86491 코딩테스트 연습 - 8주차_최소직사각형 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr def solution(sizes): max_width = 0 max_height = 0 for card in sizes: # 큰 값을 한쪽으로 몰아 넣는 과정 if card[0] < card[1]: card.reverse() # 큰 값을 갱신하는 부분 max_width = max(max_width, card[0]) max_height = max(max_he..
[프로그래머스]카펫 - 완전탐색
https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr def solution(brown, yellow): panel = brown + yellow answer = [] for width in range(3, panel+1): if ((width-2) * ((panel // width) -2) == yellow): # height 값 answer.append(panel // width) # width 값 answ..
[프로그래머스]소수 찾기 - 완전탐색
https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr from itertools import permutations import math def solution(numbers): case = [] answer = 0 for i in range(len(numbers)): permu = list(map(''.join, permutations(numbers, i+1))) for j in permu: cas..
[프로그래머스]모의고사 - 완전탐색
https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr def solution(answers): # 수포자가 정답을 찍는 패턴을 미리 지정해둠 person1 = [1, 2, 3, 4, 5] person2 = [2, 1, 2, 3, 2, 4, 2, 5] person3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] # 각 수포자 별로 맞춘 정답수를 리스트화 score = [0, 0, 0] # enumerat..
[Django]검색 퍼포먼스를 향상하기까지의 과정 2
4. Full Text Search 적용 (GIN Index) 검색을 하면서 SearchVector를 활용하면 LIKE가 포함된 SQL에 굉장히 효과적이라는 글을 여럿 찾을 수 있었습니다. Django 공식 문서에서도 나와있는 만큼 Full Text Search를 적용해보기로 합니다. https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/ Full text search | Django documentation | Django Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues Abo..
[Django]검색 퍼포먼스를 향상하기까지의 과정
어느 서비스든 마찬가지로 운영됨에 따라 누적으로 쌓이는 데이터들이 존재합니다. 저의 경우에는 메시지 테이블이 그러하였는데, 총 row가 약 50m을 넘었습니다. 따라서, 메시지의 검색 날짜기간을 길게 해둔다면 결과가 나오는데까지 15초 이상이 걸리기도 하였습니다. (첫 검색 이후에는 약 2초 내외로 걸렸습니다.) 실제로 검색 기능은 자주 이용되기 때문에 개선이 필요하다고 생각되어 Django에서 퍼포먼스를 향상시켜보기로 하였습니다. 1. 프로파일링이 먼저 테이블의 row수가 절대적으로 많기 때문에 당연히 검색은 느릴 것이라고 생각되었습니다. 하지만, 생각하는 것과는 다른 곳이 문제였던 일이 종종 있었기에 프로파일링을 앞서 진행하였습니다. Query Inspector, silk, cProfile, Debu..
[Python]테스트코드 커버리지 측정 - coverage
파이썬에서 작성한 테스트 코드의 커버리지를 측정하는 도구가 있다. https://github.com/nedbat/coveragepy GitHub - nedbat/coveragepy: Code coverage measurement for Python Code coverage measurement for Python. Contribute to nedbat/coveragepy development by creating an account on GitHub. github.com Coverage 설치 pip install coverage 먼저 측정을 위해 coverage라는 도구를 설치한다. .coveragerc 설정파일 추가 [run] include = /커버리지를 측정할 디렉토리명/* omit = *migra..
[Javascript]Javascript 멋지게 쓰기, 프로처럼 쓰기
저번 포스팅에 이어서 Javascirpt를 멋지게, 그리고 프로답게 쓰는 법에 대해서 알아보도록 하겠습니다. 이번 포스팅도 대부분 가독성에 중점을 두었습니다. 1. Nullish Coalescing Operator ( ?? ) - Null 병합 연산자 // ❌ bad 💥 function printName(text) { let message = text; if (text === null || text === undefined) { message = "No Message"; } console.log(message); } 전달받은 텍스트가 null 이거나 undefined인 경우에 No Message를, 텍스트가 있는 경우라면 message를 출력하는 함수입니다. 위처럼 작성하게 되면 간단한 역할을 하는 함수..
[Django]silk로 프로파일링 하기
개발을 진행하다보면 어느 순간에는 성능 문제를 겪기 마련입니다. 이전까지 잘 작동하던 코드가 트래픽이 많아짐에 따라서 문제가 될 수도 있고, 쌓이는 데이터의 양이 많아짐에 따라 문제가 될 수도 있습니다. 이 때 Django의 silk 프로파일러를 활용한다면 좀 더 쉽게 병목 구간을 찾을 수 있습니다. https://github.com/jazzband/django-silk GitHub - jazzband/django-silk: Silky smooth profiling for Django Silky smooth profiling for Django. Contribute to jazzband/django-silk development by creating an account on GitHub. github.c..
[Python]예외처리 - try, except, else, finally (raise) 사용하기
if, else 문으로만 모든 에러를 처리한다면 indent가 늘어남에 따라 가독성이 떨어지는 코드가 되기 마련입니다. 따라서, 예외처리 구문을 사용하여 코드를 깔끔하게 작성하도록 하여야 합니다. 이번 포스팅에서는 Python의 예외처리 방법에 대해서 간단하게 알아보겠습니다. Python의 예외처리의 기본 흐름은 try -> except -> else -> finally 순으로 진행됩니다. 모든 단계를 사용할 필요는 없고 필요에 따라 적절히 골라서 사용하면 됩니다. 하나씩 설명해보겠습니다. try & except try: # 에외처리할 코드 print(10/0) except ZeroDivisionError: # 발생하는 에러에 대한 처리 print("zero division error") 가장 기본적으로..