본문 바로가기

[알고리즘] 문제 풀이32

[스택 / 큐] 프로그래머스 - 기능개발 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42586 문제 설명 : 기능 개선 작업을 수행 중이다. 문제에서는 각 기능의 개발 속도와 개발 작업의 진도가 적힌 배열이 주어진다. 작업 진도 배열에서 뒤에 있는 원소는 앞에 있는 원소보다 우선 배포할 수 없다. 만약 0번째에 있는 작업이 100% 완성되었을 때, 1번째에 있는 작업은 이미 완성된 후라면 첫 번째 배포 날에 1번 작업까지 배포할 수 있다. 각 배포마다 몇 개의 기능을 배포할 수 있는지를 return 하는 함수를 만들어 보자. 입출력 예시 progresses speeds return [93, 30, 55] [1, 30, 5] [2, 1] [95, 90, 99, 99, 80, 99] [.. 2021. 10. 24.
2021.6.14 TIL: [알고리즘] NP-완전 (NP-Completeness) 여러 문제들을 분류해 보면 주어진 문제의 해를 구하는 알고리즘이 전혀 존재하지 않는 풀 수 없는 문제들이 존재한다. 그리고 풀 수 있는 문제들이 존재한다. 풀 수 있는 존재들을 분류 하면 현실적인 시간 내에 풀 수 없는 문제들과 현실적인 시간 내에, 즉 합리적인 시간 내에 풀 수 있는 문제들이 있다. 오늘 배운 NP-완전 문제들은 현실적인 시간 내에 풀 수 없는 문제들에 속할 것이라고 추정되는 문제들이다. 현실적인 시간은 다항식 시간(polynomial time)을 의미한다. 입력의 크기를 n이라고 할 때 n의 다항식으로 표시되는 시간을 말한다. 즉, O(n^k) 나 O(3nk + 5nk -1), O(n log n) 등이다. 비다항식 시간의 예로는 O(2^n) 혹은 O(n!) 등이 존재한다. 문제에서 요.. 2021. 6. 14.
2021.6.13 TIL : [알고리즘] 백트래킹 (BackTracking) 마지막 알고리즘 수업에서는 백트래킹과 NP-완전을 배웠다. 둘 다 조금은 이해하기 어렵다고 느껴져서 오늘은 이 내용을 정리해보고자 한다. 문제에서 어떤 해를 구할 때, 해의 형태가 n개의 원소로 이루어진 튜플인 경우가 있다. (이 때, 이 튜플 내의 각 원소를 x1, x2, x3, ... xn이라고 한다.) 해의 원소들(xi)은 유한 집합(Si)에서 선택된다. 백트래킹은 기준함수인 P를 최대화/최소화/만족하는 해를 구하는 문제를 해결하는데 적용하는 방법으로 효율적인 알고리즘이 존재하지 않을 경우에 사용한다. 모든 문제의 사례에 대해서 효율적이진 않지만 많은 문제 사례에서 효율적이다. mi를 Si의 크기, 즉 원소의 개수라고 하면, xi가 선택할 수 있는 해는 각각 m1, m2, m3, ..., mi, ... 2021. 6. 13.
[Heap] 프로그래머스 이중우선순위큐 출처 : 프로그래머스 이중우선순위큐 https://programmers.co.kr/learn/courses/30/lessons/42628# 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 문제에서 정의된 이중 우선순위 큐는 다음 연산을 할 수 있는 자료 구조를 지닌다. 명령어 수신 탐(높이) I 숫자 큐에 주어진 숫자를 삽입한다. D 1 큐에서 최대값을 삭제한다. D -1 큐에서 최소값을 삭제한다. 이중 우선순위 큐가 할 연산 operations를 매개변수로 가질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0]을, 비어 있지 않으면 [최댓값, 최소값]을 return하는 solution 함수를 구현하는 문제이다. 1) 힙 구조를 사용하지 않고 푸는 방법 가장 먼저 접근한 방법은 힙.. 2021. 5. 25.
2021.3.7 TIL : [알고리즘] 깊이 우선 탐색(Depth First Search) 깊이 우선 탐색은 탐색을 함에 있어서 보다 깊은 것을 우선적으로 하여 탐색하는 알고리즘이다. 깊이 우선 탐색은 기본적으로 전체 노드를 맹목적으로 탐색하고자 할 때 사용한다. 깊이 우선 탐색 알고리즘은 스택(stack) 자료 구조에 기초한다. 빠르게 모든 경우의 수를 탐색하고자 할 때 쉽게 사용할 수 있다. dfs의 순서 : 1. 탐색 시작 노드를 스택에 삽입하고 방문처리를 한다. 2. 스택의 최상단 노드에게 방문하지 않은 인접노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 2번 과정을 더 이상 수행할 수 없을 때까지 반복한다. 깊이 우선 탐색 알고리즘은 스택(stack) 자료구조에 기초한다는 점에서 구현이 간단하다. 실.. 2021. 3. 7.
2021.2.27 TIL : [자료구조] 그래프의 개념과 구현 그래프(Graph)란 사물을 정점(Vertex)와 간선(Edge)으로 나타내기 위한 도구이다. 지금까지 배운 자료 구조 중에 가장 복잡하면서도 일반적이라고 할 수 있다. 우리가 흔히 보는 지하철 노선도가 그래프랑 비슷하게 생겼다고 볼 수 있다. 각각의 역은 노드, 그리고 역과 역 사이에 이어진 노선은 에지로 생각하면 된다. 경로(Path)는 어떤 노드에서 다른 노드로 가는 길이라고 볼 수 있다. 같은 인덱스를 두 번 이상 거치게 되면 경로라고 부르지 않는다. 사이클(Cycle)은 어떤 노드에서 출발해서 제자리로 돌아오는 닫힌 경로를 말한다. 사이클은 그래프에 존재하지 않을 수도 있고, 2개 이상 있을 수도 있다. 사이클이 존재하지 않는 그래프의 경우, 두 노드를 연결하는 경로가 최대 1개씩 밖에 없다. .. 2021. 2. 27.