[백준] Round words Python 3
·
코딩/백준-알고리즘
문자열 LCS 문제를 비트마스크로 풀어보기LCS(Longest Common Subsequence, 최장 공통 부분 수열)는 문자열 문제에서 자주 등장하는 주제입니다. 두 문자열 간에 공통된 부분 수열 중 가장 긴 길이를 구하는 이 문제는 전통적으로 DP(Dynamic Programming)를 사용해 해결합니다. 그러나 오늘은 비트마스크를 활용하여 LCS 문제를 빠르고 효율적으로 푸는 방법과 이를 응용한 문제를 알아보겠습니다.비트마스크를 이용한 LCS 계산주어진 코드는 문자열 a와 b의 LCS 길이를 비트마스크로 계산하는 방식입니다. 비트마스크는 메모리를 효율적으로 사용하면서 대규모 연산을 빠르게 처리할 수 있는 강력한 도구입니다.핵심 로직b 문자열의 비트마스크 준비b에서 각 알파벳의 등장 위치를 기록합니..
[백준] 18439 LCS 6 C++
·
코딩/백준-알고리즘
효율적인 비트셋 기반 LCS(Largest Common Subsequence) 구현두 문자열 사이의 최장 공통 부분 수열(Longest Common Subsequence, LCS)은 컴퓨터 과학에서 자주 등장하는 문제입니다. 일반적인 동적 계획법(DP)을 활용한 방식은 O(n*m)의 시간 복잡도를 가지며, 두 문자열의 길이가 클수록 메모리 사용량과 실행 시간이 증가합니다. 1. 문제 정의주어진 두 문자열 a와 b에 대해:공통으로 존재하는 문자의 순서를 유지하는 가장 긴 부분 수열의 길이를 계산해야 합니다.예를 들어:a = "ACDBE", b = "ABCDE"가 주어졌을 때, 두 문자열의 LCS는 "ACDE"이며 길이는 4입니다.2. 알고리즘의 핵심 아이디어비트셋 기반 LCS 알고리즘은 아래의 원리로 작동..
[백준] 1046 그림자 Python 3
·
코딩/백준-알고리즘
문제 접근 방식방의 구조를 입력받고, 광원의 위치와 벽의 개수를 파악합니다.광원으로부터 빛이 퍼지는 영역을 계산합니다. 이때 빛이 벽에 의해 차단되는 경우를 고려합니다.각 방향(상하좌우)으로 빛이 퍼져나가며, 빛이 닿는 영역을 계산합니다.최종적으로 빛이 닿는 영역의 총 면적을 계산하여 빈 공간에 대한 비율을 출력합니다.각 함수의 역할 및 설명1. get_triangle_area 함수이 함수는 주어진 삼각형의 면적을 계산합니다. 삼각형의 세 점 중 두 점이 x축 위에 있을 때, 삼각형의 밑변과 높이를 이용해 면적을 계산합니다. 이 함수는 빛이 벽에 의해 차단되는 경우 삼각형 면적을 빼기 위해 사용됩니다.2. get_light_area_and_next 함수이 함수는 현재 y 좌표에서 빛이 비추는 영역과 다음..
[백준] 2586 소방차 Python 3
·
코딩/백준-알고리즘
문제 설명 이 문제는 여러 대의 소방차가 펌프에서 물을 채우기 위해 호스를 연결할 때, 호스의 총 길이를 최소화하는 문제입니다. 이 문제를 해결하기 위해 펌프와 소방차의 위치를 고려하여 가장 가까운 펌프와 소방차를 연결하는 방법을 구현했습니다. 이 코드는 bisect 모듈을 사용하여 이진 탐색을 통해 가장 가까운 펌프를 찾고, 동적 계획법을 사용하여 이미 사용된 펌프를 피하는 로직을 포함하고 있습니다. upper_bound 함수 upper_bound 함수는 주어진 배열에서 값이 들어갈 위치를 찾는 함수입니다. 이 함수는 bisect 모듈의 bisect_right 함수를 사용하여 배열에서 value보다 큰 값이 처음 나타나는 위치를 반환합니다. 이 함수는 소방차의 위치에 가장 가까운 펌프를 찾는 데 사용됩..
[백준] 수열과 퀴리 13 Python 3 (Feat 비효율)
·
코딩/백준-알고리즘
세그먼트 트리와 지연 전파를 활용한 효율적인 구간 연산 처리세그먼트 트리(Segment Tree)와 지연 전파(Lazy Propagation)를 활용하여 구간 연산을 효율적으로 처리하는 파이썬 코드를 작성해 보겠습니다. 세그먼트 트리는 구간 합, 구간 최솟값, 구간 최댓값 등 다양한 구간 연산을 빠르게 처리할 수 있는 자료구조입니다. 여기에 지연 전파 기법을 추가하여 업데이트 연산을 최적화할 수 있습니다.문제 설명주어진 배열에 대해 다음과 같은 연산을 효율적으로 수행하는 프로그램을 작성합니다:특정 구간의 모든 원소에 값을 더하는 연산특정 구간의 모든 원소에 값을 곱하는 연산특정 구간의 모든 원소를 특정 값으로 바꾸는 연산특정 구간의 합을 구하는 연산이 문제는 세그먼트 트리와 지연 전파를 사용하여 해결할 ..
[백준] 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): ..