Algorithm
-
[Python][C++] 1541번 잃어버린 괄호Algorithm/Baekjoon 2024. 7. 5. 15:54
문제https://www.acmicpc.net/problem/1541 코드1. Python# 입력을 받아 '-'를 기준으로 분할s = list(input().split("-"))ans = 0# '-'로 분할된 각 부분에 대해 처리for i in range(len(s)): # 현재 부분을 '+'를 기준으로 분할하여 각각의 숫자를 더하거나 뺌 for j in s[i].split("+"): if i == 0: # 첫 번째 부분은 더함 ans += int(j) else: # 나머지 부분은 뺌 ans -= int(j)print(ans) 2. C++#include #include #include u..
-
[Python][C++] 1463번 1로 만들기Algorithm/Baekjoon 2024. 7. 5. 02:38
문제https://www.acmicpc.net/problem/1463 코드1. Pythonn = int(input())dp = [0] * (n+1)for i in range(2, n + 1): dp[i] = dp[i-1] + 1 if i % 3 == 0: dp[i] = min(dp[i//3] + 1, dp[i]) if i % 2 == 0: dp[i] = min(dp[i//2] + 1, dp[i])print(dp[n]) 2. C++ 1. DP#include #include #include using namespace std;int main() { int n; cin >> n; vector dp(n + 1, 0); // dp[i..
-
[Python][C++] 1389번 케빈 베이컨의 6단계 법칙Algorithm/Baekjoon 2024. 7. 5. 01:29
문제https://www.acmicpc.net/problem/1389 코드1. Pythonimport sysfrom collections import dequeinput = sys.stdin.readline# BFS 함수 정의, 특정 시작 노드에서 모든 노드까지의 거리의 합을 계산def bfs(start): num = [0] * (n + 1) # 각 노드까지의 거리를 저장할 배열 q = deque() # BFS 수행을 위한 덱 visited[start] = 1 # 시작 노드 방문 표시 q.append(start) # 시작 노드를 큐에 삽입 # 큐가 빌 때까지 반복 while q: a = q.popleft() # 큐에서 노드 추출 fo..
-
[Python][C++] 1260번 DFS와 BFSAlgorithm/Baekjoon 2024. 7. 5. 00:39
문제https://www.acmicpc.net/problem/1260 코드1. Pythonn, m, v = map(int, input().split())graph = [[0] * (n + 1) for _ in range(n + 1)]# 방문 상태를 체크할 리스트 (DFS와 BFS 각각에 대해 별도로 관리)visited = [0] * (n + 1)visited2 = [0] * (n + 1)# m개의 간선 정보를 받아서 그래프를 구성for _ in range(m): a, b = map(int, input().split()) graph[a][b] = 1 # a에서 b로 가는 간선 graph[b][a] = 1 # b에서 a로 가는 간선 (양방향)# 깊이 우선 탐색 함수def dfs(V): ..
-
[Python][C++] 1074번 ZAlgorithm/Baekjoon 2024. 7. 4. 17:49
문제https://www.acmicpc.net/problem/1074 코드1. Pythondef recursion(n, x, y): global ans # 재귀의 종료 조건, n이 0이 될 경우 위치 (x, y)에 도달했음을 의미 if n == 0: ans += x * 2 + y print(ans) return # 첫 번째 사분면: 좌상단 (x, y가 모두 2^n보다 작은 경우) if x = 2 ** n: ans += 2 ** (2 * n) # 해당 사분면 전에 탐색해야 하는 전체 항목 수 추가 recursion(n - 1, x, y - 2 ** n) # y 좌표 조정하여 재귀 호출 # 세 번째 사분면..
-
[Algorithm] 분할 정복(Divide and Conquer) 알고리즘Algorithm/Concepts 2024. 7. 4. 16:25
분할 정복(Divide and Conquer) 알고리즘이란?하위 문제들이 중복되지 않을 경우에 사용하는 알고리즘이다.알고리즘의 기본 아이디어는 복잡한 문제를 더 작고 다루기 쉬운 하위 문제로 나누고, 각각을 독립적으로 해결한 다음, 그 해결 결과를 합쳐 전체 문제의 최적 해를 도출하는 것입니다. 시간복잡도분할 정복(Divide and Conquer) 알고리즘의 시간복잡도는 문제를 어떻게 분할하고 정복하는지에 따라 달라진다. 일반적인 계산을 위해 사용되는 방법은 재귀식을 통해 시간복잡도를 표현하는 것이다. 이는 문제의 크기를 줄여가면서 하위 문제의 수와 각 하위 문제를 해결하는 데 걸리는 시간을 고려한다. 이진 탐색(Binary Search):분할: 배열을 반으로 나눔.정복: 한 쪽 반을 선택하여 탐색을..
-
[Python][C++] 1012번 유기농 배추Algorithm/Baekjoon 2024. 7. 2. 17:40
문제https://www.acmicpc.net/problem/1012 코드1. Pythonimport sysinput = sys.stdin.readline # 입력을 빠르게 받기 위해 sys.stdin.readline 사용sys.setrecursionlimit(10**6) # 재귀 깊이 한계 설정, 대규모 그리드 처리를 위함dx = [-1, 1, 0, 0] # x축 이동 방향 (상, 하)dy = [0, 0, -1, 1] # y축 이동 방향 (좌, 우)def dfs(x, y): # 그리드 범위를 벗어나는 경우 즉시 종료 if x = n or y = m: return False # 현재 위치에 1이 있으면, 해당 위치를 0으로 바꾸고 주변을 탐색 if graph..
-
[Python][C++] 1003번 피보나치 함수Algorithm/Baekjoon 2024. 7. 2. 15:58
문제https://www.acmicpc.net/problem/1003 코드1. Pythont = int(input())dp = [[0, 0] for _ in range(41)]dp[0] = [1, 0]dp[1] = [0, 1]for i in range(2, 41): dp[i][0] = dp[i-1][0] + dp[i-2][0] dp[i][1] = dp[i-1][1] + dp[i-2][1] for _ in range(t): n = int(input()) print(*dp[n]) 2. C++#include #include using namespace std;int main() { ios_base::sync_with_stdio(false); cin.tie(nu..