[백준] 9252 LCS 2 Python 3
·
코딩/백준-알고리즘
두 문자열 간의 최장 공통 부분 수열(Longest Common Subsequence, LCS)을 찾는 파이썬 코드를 작성해 보겠습니다. 이 문제는 DP(동적 프로그래밍)를 이용하여 해결할 수 있습니다문제 설명LCS(Longest Common Subsequence)는 두 문자열이 주어졌을 때, 두 문자열 모두에 부분 수열이 되는 문자열 중 가장 긴 문자열을 찾는 문제입니다. 예를 들어, 문자열 "ACAYKP"와 "CAPCAK"의 LCS는 "ACAK"입니다.접근 방식LCS 문제를 해결하기 위해 다음과 같은 동적 프로그래밍 접근 방식을 사용할 수 있습니다:두 문자열 A와 B의 길이를 측정합니다.각 부분 문자열의 LCS 길이를 저장할 DP 테이블을 만듭니다.두 문자열을 순회하며 DP 테이블을 채웁니다.DP 테..
[백준] 1144 싼 비용 Python 3
·
코딩/백준-알고리즘
파이썬을 사용하여 동적 계획법(DP)을 이용해 특정 문제를 해결하는 방법을 설명하겠습니다. 주어진 문제는 격자(grid) 형태로 주어지는 값들을 이용해 최적의 해를 구하는 것입니다. 이를 해결하기 위해 작성한 Python 코드를 소개하고, 각 부분이 어떻게 동작하는지 자세히 설명하겠습니다.문제 설명주어진 문제는 다음과 같습니다:𝑛×𝑚n×m 크기의 격자가 주어집니다.각 셀에는 비용(cost)이 주어집니다.우리는 특정 조건을 만족시키면서 이 격자를 통과할 때의 최소 비용을 계산해야 합니다.코드 설명다음은 문제를 해결하기 위해 작성한 Python 코드입니다.from sys import stdin# n과 m을 입력 받음n, m = map(int, stdin.readline().split())# 그리드를 입력..
[백준] 5257 timeismoney Python 3
·
코딩/백준-알고리즘
최적의 최소 신장 트리(MST) 찾기: 크루스칼 알고리즘과 삼분 탐색크루스칼 알고리즘과 삼분 탐색을 이용해 최적의 MST를 찾는 방법을 소개합니다. 이 방법은 특히 시간과 비용의 가중치를 조합하여 최적의 MST를 찾는 데 유용합니다.문제 설명주어진 그래프에서 모든 정점을 연결하는 간선들의 집합 중, 가중치의 합이 최소가 되는 집합을 찾아야 합니다. 각 간선은 시간과 비용이라는 두 가지 가중치를 가지며, 우리는 이 두 가중치를 조합하여 최적의 MST를 찾고자 합니다. 코드 설명유니온-파인드 자료구조유니온-파인드는 서로소 집합을 관리하기 위한 자료구조로, 두 집합을 합치거나 특정 원소가 속한 집합을 찾는 작업을 효율적으로 수행할 수 있습니다. 크루스칼 알고리즘크루스칼 알고리즘은 간선을 가중치 순으로 정렬한 ..
[백준] 1134 식 Python 3
·
코딩/백준-알고리즘
Python을 이용하여 '?' 문자가 포함된 수식을 복원하는 문제를 해결하는 방법을 설명하겠습니다. 이 문제는 수식에서 '?' 문자를 적절한 숫자로 대체하여 올바른 결과를 얻는 것이 목표입니다. 이를 해결하기 위해 작성한 Python 코드를 소개하고, 각 부분이 어떻게 동작하는지 자세히 설명하겠습니다.문제 설명주어진 문제는 다음과 같습니다:수식 형태: A + B = CA, B, C에는 0-9 사이의 숫자와 '?' 문자가 포함되어 있습니다.'?' 문자를 적절한 숫자로 바꾸어 올바른 수식을 복원해야 합니다.예를 들어, 입력이 ?2 + 3? = 55라면, 42 + 13 = 55와 같은 형태로 '?'를 대체해야 합니다.코드 설명다음은 문제를 해결하기 위해 작성한 Python 코드입니다.def c2i(c): ..
[백준] 4008 특공대 Python 3
·
코딩/백준-알고리즘
데크 - 누적 합, 동적 프로그래밍(DP) 및 데크를 결합하여 큰 데이터 세트를 효율적으로 처리하는 데 유용합니다.문제 개요N명의 병사가 주어졌을 때, 각 병사는 특정 전투력 값을 가지고 있습니다. 우리는 A, B, C라는 세 개의 계수를 사용하여 일련의 계산을 통해 전투력을 최대화하고자 합니다. 이 솔루션의 핵심은 데크를 사용하여 선형 함수를 효율적으로 관리함으로써 DP 전환을 최적화하는 것입니다.함수 T 설명함수 T(i, j, A, B)는 주어진 계수 A와 B 아래에서 점 i와 j로 정의된 두 직선의 교점을 계산합니다. 이 함수는 선이 더 이상 유효하지 않고 데크에서 제거될 수 있는지를 결정하는 데 중요한 역할을 합니다. 전체 코드다음은 전체 코드입니다:import sysfrom collections..
[백준] 1031 스타대결 Python 3
·
코딩/백준-알고리즘
파이썬을 사용하여 BFS(너비 우선 탐색) 알고리즘을 통해 최대 유량 문제를 해결하는 방법을 설명하겠습니다. 이 문제는 그래프 이론의 한 분야로, 네트워크 플로우 문제를 해결하는 데 사용됩니다. 주어진 문제를 해결하기 위해 작성한 Python 코드를 소개하고, 각 부분이 어떻게 동작하는지 자세히 설명하겠습니다.문제 설명주어진 문제는 다음과 같습니다:두 개의 행렬 𝑁N과 𝑀M이 주어집니다.각 행렬의 요소는 0 또는 1의 값을 가집니다.목표는 𝑁×𝑀N×M의 0과 1로 이루어진 최종 행렬을 만들어 각 행과 열의 합이 주어진 값과 동일하게 만드는 것입니다.이를 해결하기 위해서 네트워크 플로우 문제로 변환하고, BFS를 활용하여 최대 유량을 계산합니다.코드 설명다음은 문제를 해결하기 위해 작성한 Pytho..
[백준] 5979 남땜하기 C++ (Feat 고찰)
·
코딩/백준-알고리즘
Li Chao Segment Tree를 사용하여 최소 비용 트리 문제를 해결하는 방법에 대해 설명합니다. 이 알고리즘은 주어진 트리 구조에서 비용을 최소화하는 경로를 찾는 데 사용됩니다. 해당 알고리즘을 C++로 구현합니다문제 설명주어진 트리에서 각 노드를 방문하는 비용이 정의되어 있을 때, 특정 노드에서 시작하여 모든 노드를 방문하는 최소 비용을 계산하는 문제입니다. 이 문제를 해결하기 위해 우리는 Li Chao Segment Tree라는 자료 구조를 사용합니다.Li Chao Segment Tree란?Li Chao Segment Tree는 선형 함수들의 최소값을 구하는 데 최적화된 자료 구조입니다. 이 자료 구조는 Convex Hull Trick과 비슷하지만, 세그먼트 트리의 형태로 구현되어 특정 범위..
[백준] 1257 엄청난 부자 Python 3
·
코딩/백준-알고리즘
문제 설명먼저 문제를 이해해봅시다. 입력으로는 다음과 같은 값들이 주어집니다:목표 값 𝑚m리스트의 길이 𝑛n𝑛n개의 정수로 이루어진 리스트 𝑎a우리는 리스트 𝑎a의 요소들을 사용하여 목표 값 𝑚m에 도달하는 가장 빠른 방법을 찾아야 합니다.코드 설명다음은 문제를 해결하기 위해 작성한 Python 코드입니다.import heapqdef main(): # 입력 받기 m = int(input()) n = int(input()) a = list(map(int, input().split())) # 최대 요소 값 구하기 s = max(a) # dp 배열 초기화 dp = [float('inf')] * s dp[0] = 0 # 우선순위 큐 초기화 p..