[백준] 11053번 가장 긴 증가하는 부분 수열(python)(dp)
https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 1. 내가 작성한 코드 n = int(input()) A = list(map(int,input().split())) dp = [1] * n #부분 수열의 최소 개수는 1이기 때문에 모두 1 for i in range(1,n): #1번부터 n번까지 확인 for j in range(i): #본인보다 앞에 있는 수 확인 if..
2023. 3. 1.
[구간 합] 접두사 합
구간 합의 시간복잡도는 O(NM)이다. N,M의 데이터가 커지면 시간복잡도가 증가하게 되어 문제가 발생한다. 이럴 경우 구간 합 혹은 누적 합 계산을 빠르게 하기 위해 접두사 합을 이용하면 된다. 접두사 합은 리스트의 맨 앞부터 특정 위치까지의 합을 미리 구해놓은 것이다. 아래를 코드를 실행시키면 sum value = [0, 10, 30, 60, 100, 150] 이 되며 sum_value[right] - sum_value[left-1] 을 해주면 빠르게 구할 수 있다. n = int(input()) data = [10,20,30,40,50] sum_value = 0 prefix_sum = [0] for i in data: sum_value += i prefix_sum.append(sum_value) l..
2023. 2. 26.
[백준] 2960번 에라토스테네스의 체(python)
https://www.acmicpc.net/problem/2960 2960번: 에라토스테네스의 체 2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다. www.acmicpc.net 1. 난이도 실버4 (🥈) 2. 문제 해결 방법 에라토스테네스 체 복습할 겸 풀어봤다. 이 문제에선 소수도 지우는 수로 count 한다는 점을 주의해서 해결하면 된다. n,k = map(int, input().split()) num = [True] * (n+1) x = 0 for i in range(2,n+1): if num[i] == True: x += 1 if x == k: print(i) break for j in range(2*i, n+1, i): if num[j] != Fal..
2023. 2. 26.