[Python 3] 재귀 깊이 설정하기
·
코딩/개인 PT
1. 재귀 깊이 기본 제한 확인Python의 기본 재귀 깊이 제한은 sys.getrecursionlimit()을 통해 확인할 수 있습니다. 대부분의 시스템에서는 기본값이 1000입니다.import sysprint(sys.getrecursionlimit()) # 기본값: 10002. 재귀 깊이 늘리기sys.setrecursionlimit()을 사용하여 재귀 깊이 제한을 늘릴 수 있습니다.import syssys.setrecursionlimit(2000) # 재귀 깊이를 2000으로 설정 EX codeimport syssys.setrecursionlimit(1500) # 재귀 깊이를 1500으로 설정def recursive_function(n): if n == 0: return "완료..
[백준] 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): ..
[백준] 4008 특공대 Python 3
·
코딩/백준-알고리즘
데크 - 누적 합, 동적 프로그래밍(DP) 및 데크를 결합하여 큰 데이터 세트를 효율적으로 처리하는 데 유용합니다.문제 개요N명의 병사가 주어졌을 때, 각 병사는 특정 전투력 값을 가지고 있습니다. 우리는 A, B, C라는 세 개의 계수를 사용하여 일련의 계산을 통해 전투력을 최대화하고자 합니다. 이 솔루션의 핵심은 데크를 사용하여 선형 함수를 효율적으로 관리함으로써 DP 전환을 최적화하는 것입니다.함수 T 설명함수 T(i, j, A, B)는 주어진 계수 A와 B 아래에서 점 i와 j로 정의된 두 직선의 교점을 계산합니다. 이 함수는 선이 더 이상 유효하지 않고 데크에서 제거될 수 있는지를 결정하는 데 중요한 역할을 합니다. 전체 코드다음은 전체 코드입니다:import sysfrom collections..