본문 바로가기

Programming/Algorithm5

[프로그래머스] 스택/큐 주식가격 (with.python) 1. 문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 2. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 3. 입출력 예 prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] 4. solution.py def solution(prices): answer = [] temp = [0] * len(prices) for i in range(0, len(prices)): count=0 for j in range(i+1, len(prices)): if prices[i] 2021. 9. 8.
[프로그래머스] 스택/큐 프린터 (with.python) 1. 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 그렇지 않으면 J를 인쇄합니다. 2. 제한 사항 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다. 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다. location은 0 이상 (현재 대기목록에 있는 작업.. 2021. 9. 7.
[프로그래머스] 스택/큐 기능개발 (with.python) 1. 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 2. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100.. 2021. 9. 6.
Sorting (2) - 정렬 알고리즘 구현하기 (Shell, Merge, Quick) (with.Python) Shell Sort (셸 정렬) 주어진 간격(일반적으로 k)만큼 떨어진 서브배열을 만들어 삽입정렬을 수행한다. 시간복잡도는 평균적으로 O(n log n), 최고 O(n), 최악의 경우 O(n^2)의 시간복잡도를 가지고 있다. 간격에 따른 성능이 제각각이라 시간복잡도 분석이 쉽지 않다. 간격은 홀수로 지정하여, 간격이 절반으로 줄어들 때 짝수가 나오면 +1을 하여 홀수로 만든다. def gapInsertionSort(x, start, gap): for target in range(start+gap, len(x), gap): val = x[target] i = target while i > start: if x[i-gap] > val: x[i] = x[i-gap] else: break i -= gap x[i.. 2021. 6. 28.
Sorting (1) - 정렬 알고리즘 구현하기 (Bubble, Selection, Insertion) (with.Python) Bubble Sort (버블정렬) 인접한 두 원소를 검사하여 큰 값이 오른쪽으로 이동하는 과정을 반복하여, 비교했던 모든 값들의 최댓값을 맨 오른쪽으로 옮긴다. 시간복잡도가 최악의 경우 (Big O) O(n^2)로 (n-1) + (n-2) + ··· + 1번 비교가 이루어진다. 그러나, 데이터가 잘 정렬되어 있다면 O(n)으로 데이터 정렬 여부를 파악하기 위한 알고리즘으로 사용될 수 있다. def swap(x, i, j): x[i], x[j] = x[j], x[i] def bubbleSort(x): for size in reversed(range(len(x))): for i in range(size): if x[i] > x[i+1]: swap(x, i, i+1) return x if __name__ ==.. 2021. 6. 28.