가장 긴 증가하는 부분 수열
-
[백준 2565번] 전깃줄Coding Test/백준 2021. 2. 7. 23:19
# 문제 내 풀이 n = int(input()) # 전깃줄의 위치 정보 입력 받음 lines = [] for _ in range(n): a, b = map(int, input().split()) lines.append((a, b)) # A의 위치를 기준으로 전깃줄 위치 정보를 오름차순 정렬 lines.sort(key=lambda x: x[0]) # DP 테이블 생성 및 초기화 dp = [1] * n # B의 수열에서 가장 긴 증가하는 부분 수열(LIS) 찾기 for i in range(1, n): for j in range(0, i): if lines[i][1] > lines[j][1]: dp[i] = max(dp[i], dp[j] + 1) # 없애야 하는 전깃줄의 최소 개수 구하기 print(n - m..
-
[백준 11054번] 가장 긴 바이토닉 부분 수열Coding Test/백준 2021. 2. 6. 04:40
# 문제 내 풀이 n = int(input()) nums = list(map(int, input().split())) # 수열 입력 받기 # 가장 긴 증가하는 부분 수열과 감소하는 부분 수열 각각을 위한 DP 테이블 생성 및 초기화 dp_asc = [1] * 1000 dp_desc = [1] * 1000 # 가장 긴 증가하는 부분 수열 (LIS) 알고리즘 수행 for i in range(1, n): for j in range(0, i): if nums[i] > nums[j]: dp_asc[i] = max(dp_asc[i], dp_asc[j] + 1) # 가장 긴 감소하는 부분 수열 알고리즘 수행 for i in range(n - 2, -1, -1): for j in range(n - 1, i, -1): ..
-
[백준 11053번] 가장 긴 증가하는 부분 수열Coding Test/백준 2021. 1. 30. 14:08
# 문제 내 풀이 # 내 풀이 n = int(input()) nums = list(map(int, input().split())) # 수열 입력 받기 # DP 테이블 생성 및 초기화 dp = [1] * 1000 # 가장 긴 증가하는 부분 수열(LIS) 알고리즘 수행 for i in range(1, n): for j in range(0, i): if nums[j] < nums[i]: dp[i] = max(dp[i], dp[j] + 1) # 결과 출력 print(max(dp))