Algorithm
-
[MySQL] 카테고리 별 도서 판매량 집계하기Algorithm/Programmers 2024. 9. 25. 16:35
문제https://school.programmers.co.kr/learn/courses/30/lessons/144855 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이SELECT b.CATEGORY, SUM(bs.SALES) AS TOTAL_SALEFROM BOOK bJOIN BOOK_SALES bsON b.BOOK_ID = bs.BOOK_IDWHERE bs.SALES_DATE LIKE '2022-01%'GROUP BY b.CATEGORYORDER BY b.CATEGORY
-
[C++] 1167번 트리의 지름Algorithm/Baekjoon 2024. 9. 25. 13:38
문제https://www.acmicpc.net/problem/1167 코드#include #include #include using namespace std;// BFS 함수: 시작 노드 v에서 가장 먼 노드를 찾고, 그 거리와 함께 반환pair bfs(int v, int n, const vector>>& graph) { queue> q; // BFS 탐색을 위한 큐, (노드 번호, 거리) vector visited(n+1); // 방문 여부를 체크하는 배열 q.push(make_pair(v, 0)); // 시작 노드와 거리를 큐에 삽입 visited[v] = 1; // 시작 노드 방문 처리 int farthestV = v; // 가장 먼 노드를 저장할 변수 (..
-
[Algorithm] 프림(Prim) 알고리즘Algorithm/Concepts 2024. 9. 22. 02:39
프림(Prim) 알고리즘이란?프림 알고리즘(Prim's Algorithm)은 최소 신장 트리(MST, Minimum Spanning Tree)를 찾기 위한 또 다른 그리디 알고리즘이다.알고리즘의 기본 아이디어는 시작점에서 출발해 인접한 간선을 선택하며 최소 신장 트리를 점진적으로 확장해가는 방식이다. 프림 알고리즘은 힙(heap)이나 우선순위 큐(priority queue)를 사용하여 효율적으로 최소 가중치의 간선을 선택할 수 있다. 시간복잡도프림 알고리즘의 시간 복잡도는 그래프를 구현하는 방식에 따라 다르다인접 리스트를 사용하고, 우선순위 큐로 구현:O(ElogV), 여기서 E는 간선의 수, V는 정점의 수우선순위 큐를 통해 간선 선택을 효율적으로 처리인접 행렬을 사용:O(V^2) 시간이 걸립니다. ..
-
[Algorithm] 크루스칼(Kruskal) 알고리즘Algorithm/Concepts 2024. 9. 22. 02:32
크루스칼(Kruskal) 알고리즘이란?최소 신장 트리(MST, Minimum Spanning Tree) 를 찾기 위한 대표적인 그리디 알고리즘 중 하나이다.알고리즘의 기본 아이디어는 간선을 가중치 순으로 정렬한 후, 가장 작은 가중치의 간선을 하나씩 선택하면서, 선택된 간선이 사이클을 이루지 않는 경우에만 최소 신장 트리에 포함하는 것이다. 시간복잡도크루스칼 알고리즘의 시간 복잡도는 O(ElogE)이다. 여기서 E는 그래프의 간선 수를 의미한다. 주요 연산은 다음과 같다:간선 정렬: 간선들을 가중치 순으로 정렬하는 데 O(ElogE)의 시간이 소요된다.유니온-파인드 연산: 각 간선에 대해 유니온-파인드를 사용하여 사이클을 판별하는 데 O(Eα(V))의 시간이 소요된다. α(V)는 아커만 함수의 역..
-
[Python][C++] 1149번 RGB거리Algorithm/Baekjoon 2024. 9. 17. 11:38
문제https://www.acmicpc.net/problem/1149 코드1. Pythonimport sysinput = sys.stdin.readline # 빠른 입력을 위해 sys.stdin.readline 사용# 집의 수 입력n = int(input())# 각 집을 칠하는 비용을 저장할 리스트 pp = []for _ in range(n): p.append(list(map(int, input().split()))) # 각 집을 칠하는 비용을 입력받아 리스트에 추가# 1번째 집부터 n번째 집까지 최소 비용을 누적 계산for i in range(1, n): # 현재 집을 빨간색으로 칠하는 최소 비용은 이전 집을 초록색 또는 파란색으로 칠한 비용 중 최소값에 현재 집을 빨간색으로 칠하는..
-
[Python][C++] 1043번 거짓말Algorithm/Baekjoon 2024. 9. 17. 11:28
문제https://www.acmicpc.net/problem/1043 코드1. Pythonimport sysinput = sys.stdin.readline # 빠른 입력을 위해 sys.stdin.readline 사용# n: 사람 수, m: 파티 수n, m = map(int, input().split())# 진실을 알고 있는 사람들의 집합. 처음 입력은 첫 번째 숫자가 진실을 아는 사람 수이므로 [1:]로 슬라이싱하여 사람들의 번호만 가져옴knowing = set(input().split()[1:])# 각 파티에 참여하는 사람들의 정보를 저장하는 리스트 (각 파티는 집합으로 표현)parties = [set(input().split()[1:]) for _ in range(m)]# 모든 파티에 대해 진..
-
[Algorithm] 유니온-파인드(Union-Find) 알고리즘Algorithm/Concepts 2024. 9. 16. 13:23
유니온-파인드(Union-Find) 알고리즘이란? 유니온-파인드 알고리즘은 서로소 집합(Disjoint Set)을 효율적으로 관리하는 자료구조이다. 주로 그래프에서 사이클을 판별하거나, 네트워크 연결 문제에서 각 노드 간의 연결 여부를 확인하는 데 사용된다.알고리즘의 기본 아이디어는 여러 개의 원소가 존재하는 집합을 트리 구조로 표현하고, 두 집합을 합치거나(Union) 특정 원소가 속한 집합을 찾는(Find) 연산을 효율적으로 수행하는 것이다. 시간복잡도유니온-파인드 알고리즘의 시간 복잡도는 경로 압축(Path Compression)과 랭크에 의한 합치기(Union by Rank)를 사용할 경우, 거의 상수 시간인 O(α(n))이 된다. 여기서 α(n)은 아커만 함수의 역함수로, 매우 느리게 증가하는..
-
[C++] 30804번 과일 탕후루Algorithm/Baekjoon 2024. 9. 15. 22:42
문제https://www.acmicpc.net/problem/30804 코드1. C++#include #include #include using namespace std;int main() { int n; cin >> n; // 과일의 수 입력 vector fruits(n); // 과일의 종류를 저장할 벡터 // 과일 종류 입력 for (int i = 0; i > fruits[i]; } unordered_map cnt; // 과일의 종류별 개수를 저장할 맵 int left = 0, max_len = 0; // 슬라이딩 윈도우의 왼쪽 포인터와 최대 길이를 저장할 변수 // 슬라이딩 윈도우를 사용하여 최대 연속 부분 배열 찾기 for (in..