[프로그래머스]큰 수 만들기 - 그리디
·
SW개발/코딩테스트
https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr def solution(number, k): # 스택을 활용한다 stk = [] # number 리스트를 순회함 for num in number: # 제거해야할 값(k)가 남아있고, stk에 값이 있고, stk의 마지막의 값보다 현재 나온수가 더 크다면 # (큰 숫자가 큰 자릿수를 가지게 하기 위해) # 스택의 마지막 숫자를 없애버리고, 제거해야할 값을 하나 줄임 while k > 0 and stk and stk[-1] < num: stk.pop() k -= 1 # 기본적으로 값을 한개씩 넣어줌, (위의 조건에 부합할 경우에만 스택에서 값..
[프로그래머스]입국심사 - 이분탐색
·
SW개발/코딩테스트
https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr def solution(n, times): answer = 0 left, right = 1, max(times) * n while left = n: right = mid - 1 # 최대 인원수보다 심사 가능한 인원이 작다면 예상되는 시간을 늘린다 else: left = mid + 1 # 마지막의 정답은 left값으로 설정 answer = left return an..
[프로그래머스]8주차_최소직사각형 - 위클리 챌린지
·
SW개발/코딩테스트
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..
[프로그래머스]카펫 - 완전탐색
·
SW개발/코딩테스트
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..
[프로그래머스]소수 찾기 - 완전탐색
·
SW개발/코딩테스트
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..
[프로그래머스]모의고사 - 완전탐색
·
SW개발/코딩테스트
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
·
SW개발/개발이야기
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]검색 퍼포먼스를 향상하기까지의 과정
·
SW개발/개발이야기
어느 서비스든 마찬가지로 운영됨에 따라 누적으로 쌓이는 데이터들이 존재합니다. 저의 경우에는 메시지 테이블이 그러하였는데, 총 row가 약 50m을 넘었습니다. 따라서, 메시지의 검색 날짜기간을 길게 해둔다면 결과가 나오는데까지 15초 이상이 걸리기도 하였습니다. (첫 검색 이후에는 약 2초 내외로 걸렸습니다.) 실제로 검색 기능은 자주 이용되기 때문에 개선이 필요하다고 생각되어 Django에서 퍼포먼스를 향상시켜보기로 하였습니다. 1. 프로파일링이 먼저 테이블의 row수가 절대적으로 많기 때문에 당연히 검색은 느릴 것이라고 생각되었습니다. 하지만, 생각하는 것과는 다른 곳이 문제였던 일이 종종 있었기에 프로파일링을 앞서 진행하였습니다. Query Inspector, silk, cProfile, Debu..
[Python]테스트코드 커버리지 측정 - coverage
·
SW개발/Python
파이썬에서 작성한 테스트 코드의 커버리지를 측정하는 도구가 있다. 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 멋지게 쓰기, 프로처럼 쓰기
·
SW개발/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를 출력하는 함수입니다. 위처럼 작성하게 되면 간단한 역할을 하는 함수..