Algorithm/Baekjoon
-
[C++] 1991번 트리 순회Algorithm/Baekjoon 2024. 11. 20. 10:21
문제https://www.acmicpc.net/problem/1991 코드#include #include #include using namespace std;// 트리를 저장할 그래프 자료구조// 각 노드는 문자로 표현되며, 해당 노드의 자식 노드들을 저장unordered_map> graph;// 전위 순회 함수 (Preorder Traversal)// 현재 노드 -> 왼쪽 자식 -> 오른쪽 자식 순으로 순회void preorder(char node) { if (node == '.') return; // 현재 노드가 비어있다면 종료 cout 현재 노드 -> 오른쪽 자식 순으로 순회void inorder(char node) { if (node == '.') return; // 현재 ..
-
[C++] 1987번 알파벳Algorithm/Baekjoon 2024. 11. 20. 09:34
문제https://www.acmicpc.net/problem/1987 코드#include #include #include #include using namespace std;// DFS를 사용하여 보드에서 가능한 가장 긴 경로의 길이를 찾는 함수int dfs(const int& r, const int& c, const vector& board) { // 이동 방향: 상, 하, 좌, 우 int dx[] = { -1, 1, 0, 0 }; int dy[] = { 0, 0, -1, 1 }; // DFS에 사용할 스택. 각 요소는 (x, y, mask, length)를 나타냄 stack> s; int ret = 0; // 최대 길이를 저장할 변수 // 초기 상태: (0,..
-
[C++] 1967번 트리의 지름Algorithm/Baekjoon 2024. 11. 1. 16:29
문제https://www.acmicpc.net/problem/1967 코드#include #include #include #include using namespace std;// BFS를 통해 시작 노드 v에서 가장 먼 노드와 거리를 반환pair bfs(int v, const int n, const vector>>& graph) { queue q; vector visited(n + 1, -1); // 방문 여부 및 거리를 저장하는 배열 (초기값 -1) q.push(v); visited[v] = 0; // 시작 노드는 거리가 0 // BFS 수행 while (!q.empty()) { v = q.front(); q.pop(); // 현재 노드 v와 연결된 모든 노드 탐색 for (const ..
-
[C++] 1932번 정수 삼각형Algorithm/Baekjoon 2024. 10. 26. 02:41
문제https://www.acmicpc.net/problem/1932 코드#include #include #include using namespace std;int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // 입출력 속도 향상 int n; cin >> n; // 삼각형의 층 수 입력 vector dp(n); // 현재 층에서의 최대 합을 저장할 배열 cin >> dp[0]; // 첫 번째 층 입력 // 두 번째 층부터 마지막 층까지 반복 for (int i = 1; i temp(i + 1); // 임시 배열 생성 (현재 층에서의 최대 합 계산용) // 현재 층의 각 숫자..
-
[C++] 1918번 후위표기식Algorithm/Baekjoon 2024. 10. 24. 17:02
문제https://www.acmicpc.net/problem/1918 코드#include #include #include #include using namespace std;int main() { string expression; // 중위 표기법으로 입력되는 수식을 저장할 문자열 cin >> expression; // 수식 입력 // 연산자의 우선순위를 저장하는 맵 unordered_map precedence = { {'+', 1}, {'-', 1}, // 덧셈과 뺄셈은 같은 우선순위 (1) {'*', 2}, {'/', 2}, // 곱셈과 나눗셈은 같은 우선순위 (2) {'(', 0}, {')', 0} // 괄호의 우선순위..
-
[Python][C++] 1916번 최소 비용 구하기Algorithm/Baekjoon 2024. 10. 23. 16:56
문제 https://www.acmicpc.net/problem/1916 코드1. Pythonimport sysimport heapqinput = sys.stdin.readline # 빠른 입력을 위해 sys.stdin.readline 사용# n: 도시(노드)의 개수, m: 버스(간선)의 개수n = int(input())m = int(input())# 그래프 초기화 (1번 도시부터 시작하므로 n+1 크기)graph = [[] for _ in range(n+1)]# 방문 배열 초기화, 각 도시에 도달하는 최소 비용을 저장, 무한대 값으로 초기화visited = [1e9] * (n + 1)# m개의 간선 입력 처리for _ in range(m): start, end, cost = map(int..
-
[C++] 1865번 웜홀Algorithm/Baekjoon 2024. 10. 23. 16:10
문제https://www.acmicpc.net/problem/1865 코드#include #include using namespace std;// 간선 구조체 정의struct Edge { int s, e, w; // s: 시작점, e: 끝점, w: 가중치};// 벨만-포드 알고리즘: 음의 사이클이 있는지 검사bool bellmanFord(const vector& edges, const int& N) { vector dist(N + 1, 0); // 각 노드의 최단 거리를 저장하는 배열 (1-based index) // N번 반복하여 모든 간선을 확인 for (int i = 1; i dist[edge.s] + edge.w) { dist[edg..
-
[C++] 1753번 최단경로Algorithm/Baekjoon 2024. 10. 13. 14:25
문제https://www.acmicpc.net/problem/1753 코드#include #include #include using namespace std;// 다익스트라 알고리즘: 시작점 s에서 모든 노드까지의 최단 거리를 계산vector dijkstra(const int& s, const vector>>& graph) { // 우선순위 큐에서 가중치가 작은 순으로 처리하기 위한 비교 함수 (최소 힙) auto compare = [](const pair& a, const pair& b) { return a.second > b.second; }; priority_queue, vector>, decltype(compare)> pq(compare); // 최소 힙을 위한 우선순위 큐 vec..