본문 바로가기
728x90

코딩테스트25

다이나믹 프로그래밍 - 백준 1912 [Python] Problem) Solution) D[i] = i 번째 수로 끝나는 가장 큰 연속합 이렇게 식을 구했으면, i번째 수에게 가능한 경우를 세야한다. 따라서 A[i-1]로 끝나는 가장 큰 연속합 뒤에 A[i]가 추가된 경우라고 생각하여 문제를 풀면 된다. 점화식을 세워보면, D[i-1] + A[i], A[i]중 최대값을 D[i]에 넣어주면 된다. Answer) n = int(input()) a = list(map(int,input().split())) d = [0]*(n) for i in range(n): d[i] = a[i] if i == 0: continue if d[i] < d[i-1] + a[i]: d[i] = d[i-1] + a[i] print(max(d)) 2021. 8. 5.
다이나믹 프로그래밍 - 백준 14002 [Python] Problem) https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net Solution) 가장 긴 증가하는 부분 수열 문제이다. 부분 수열은 수열에서 수를 선택해서 만드는 수열이다. 이때, 수열에 있던 수의 순서는 변경할 수 없다. 수열의 길이가 N일 때, 선택 가능한 수는 2^N이 된다. (왜냐하면 그 수를 선택하거나, 안하거나 둘중 하나기 때문이다.) 이때, 모든 부.. 2021. 8. 5.
다이나믹 프로그래밍 - 백준 2193 [Python] Problem) https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net Solution) D[i][j] = i 자리 이친수의 개수 중에서 j로 끝나는 것의 개수 (j=0,1) 가능한 경우는 0으로 끝나는 경우 (D[i][j]) 앞에 0과 1이 올 수 있다. D[i-1][0] + D[i-1][1] 1로 끝나는 경우 (D[i][1]) 앞에 1은 올 수 없다. 즉, 0만 올 수 있다. D[i-1][0] Answer) n = int(input()).. 2021. 8. 5.
다이나믹 프로그래밍 - 백준 10844 [Python] Problem) https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net Solution) 연속하는 수의 차이, 마지막에 오는 수의 차이를 기록하면 된다. 따라서 1차원으로 바로 정의하기 보다는 D[i][j] = 길이가 i인 계단 수, 마지막 자리가 j인 개수로 정의하여 해결한다. 그리고 맨 마지막에 올 수 있는 수는 j-1이거나, j+1인 경우이기 때문에 각각 나눠서 풀도록 한다. Answer) mod = 1000000000 n = int(input()) d = [[0]*10 for _ in range(101)] for i in range(1, 10): d[1][i.. 2021. 8. 5.
728x90