본문 바로가기

dev/알고리즘문제풀이13

[ 백준 11053번 ] 가장 긴 증가하는 부분 수열(LIS) 파이썬 [백준 11053번 바로가기] 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 논리 주어진 문자열을 seq라고 할 때 seq[i]까지의 lis[i]를 기록해놓는다 i < j 인 seq[j]로 끝나는 lis 길이를 알기 위해 이전까지의 lis[i](i < j)를 참고한다 이때, seq[i] < seq[j]라면 lis[j] = max(lis[j], lis[i]+1)로 계속 갱신한다 코드 import sys def LIS(): # inpu.. 2021. 9. 1.
[ 백준 2573번 ] 빙산 파이썬 [백준 2573번 빙산 바로가기] 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 논리 빙산의 개수 파악: dfs탐색(원래 field를 변경하지 않기 위해 check_points라는 다른 배열 사용) 매 턴마다 다음 녹은 빙산을 계산하여 적용 매 턴마다 모든 field를 탐색하는 것은 불필요하므로 상한, 하한선을 갱신하여 그 안에서만 탐색하도록 함(xl, xr, yl, yr) 코드 import sys sys.setrecursionlimit(10000000) def iceburg(field, R, C): .. 2021. 8. 25.
[ 백준 2623번 ] 음악프로그램 파이썬 [백준 2623번 음악 프로그램 바로가기] 2623번: 음악프로그램 첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 www.acmicpc.net 1 큐를 이용한 위상정렬 논리 진입차수가 0인 노드를 큐에 넣는다 큐에서 꺼내면서 result에 순차적으로 기록하고, 해당 노드에 연결을 없앤다 연결이 해제된 노드들 중 새로 진입차수가 0이 된 노드를 큐에 넣는다 탐색 완료시 result의 개수가 총 노드의 개수보다 적으면 순환구조가 발생한 것이라 판단 2 dfs를 이용한 위상정렬 논리 진입차수가 0인 노드부터 dfs진행(방문한 노드 기록하여 중복된.. 2021. 8. 25.
[ 백준 11725번] 트리의 부모 찾기 파이썬 [백준 11725번 트리의 부모 찾기 바로가기] DFS(recursion), DFS(stack), BFS 3가지로 구현 논리 현재 노드에 연결된 다음 노드들 중 부모 노드가 기록되지 않는 것들 탐색 탐색할 때 해당 노드의 부모 노드를 현재 노드로 기록 코드 import sys sys.setrecursionlimit(10000000) from collections import defaultdict, deque # dfs using recursion def DFS(graph, N, start): parents = defaultdict(lambda: None) parents[start] = True def _dfs(curr): # 현재 노드의 자식들 중 부모 노드가 기록되지 않은 것들 탐색 # 부모 노드 기록.. 2021. 8. 24.