본문 바로가기
728x90
반응형

python17

[백준/Python] 11055 가장 큰 증가하는 부분 수열 문제: https://www.acmicpc.net/problem/11055  사용 알고리즘: DP  수열 A 가 주어졌을 때, 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램 구현ex) A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} -> 1, 2, 50, 60  합 113  입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)둘째 줄에는 수열 A를 이루고 있는 Ai(1 ≤ Ai ≤ 1,000)  dp[i] -> 수열 A 의 0 번째 인덱스부터 i 번째 인덱스까지의 부분 합 중 가장 큰 부분 합 i 는 현재 위치, j 는 처음~현재 위치까지 수들을 비교하기 위한 인덱스 현재 위치를 고정시켜놓고 현재 위치까지 수열을 돌면서 현재 위치 값과 방문한 수열의 .. 2024. 7. 3.
[백준/Python] 11722 가장 긴 감소하는 부분 수열 문제: https://www.acmicpc.net/problem/11722  사용 알고리즘: DP  수열 A 가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 문제 ex) A = {10, 30, 10, 20, ,20, 10} -> 30, 20, 10  입력수열 A 의 크기 N (1 수열 Ai (1   여기서 중요한 것은 부분 수열이 연속적일 필요가 없다는 것!-> 이중 for 문을 돌면서 현재 위치의 수와 (처음~현재 위치) 까지의 수들을 비교해서 현재 위치에서 가장 긴 감소하는 배열의 길이를 찾기 i 는 현재 위치, j 는 처음~현재 위치까지 수들을 비교하기 위한 인덱스 현재 위치를 고정시켜놓고 현재 위치까지 수열을 돌면서 현재 위치와 방문한 수열의 값을 비교for i in range(n): .. 2024. 7. 2.
[백준/Python] 11726 2*n 타일링 문제: https://www.acmicpc.net/problem/11726  사용 알고리즘: DP  2 * n  크기의 직사각형을 1 * 2, 2 * 1 타일로 채우는 방법의 수를 구하는 문제 -> 전형적인 DP 문제  주어진 직사각형을 채우기 위한 방법의 수를 구하기 위해 도미노를 쪼개어 생각해보자. 1 * 2 / 2 * 1 의 두 가지 타일로 주어진 직사각형의 가장 오른쪽 부분을 채우는 방법을 생각해보면 아래와 같이 2가지 방법이 있다. -> dp[n] = dp[n-1] + dp[n-2]  # 입력n = int(input())# dp 초기화, 인덱스 1 부터 사용할 것이기 때문에 1001 칸을 만들어줌dp = [0] * 1001dp[1] = 1dp[2] = 2for i in range(3, n+1):.. 2024. 7. 2.
[백준/Python] 1912 연속합 문제: https://www.acmicpc.net/problem/1912  사용 알고리즘: DP  입력첫째 줄에 정수 n(1 ≤ n ≤ 100,000)둘째 줄에는 n개의 정수로 이루어진 수열 (수는 -1,000 보다 크거나 같고, 1,000보다 작거나 같은 정수  n 개의 정수로 이루어진 임의의 수열에서 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. (단 수는 한 개 이상 선택해야 함)-> 부분합을 구하는 문제로 전형적인 dp 문제! 만약 dp 로 풀지 않는다면 이중 for 문을 써서 모든 [a, b] 구간합을 다 구해서 확인해야 한다. 이중 for 문을 써서 완전 탐색을 한다면 O(n^2) 의 Big-O 시간을 가지게 되고 문제에서 주어진 n 의 최대 값이 10만 이.. 2024. 6. 23.
728x90
반응형