본문 바로가기
728x90

알고리즘339

[Python] 백준 2309 일곱 난쟁이 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 해결 리스트 안에 두 개의 원소를 빼는 방법을 선택 뺄 두 개원 원소 인덱스중 작은 인덱스를 start, 큰 인덱스를 end로 잡고 하려고 함. 알고 있는 지식이 전체 수의 합이므로 리스트를 sort 시킨 후 start, end 포인트 이동이 편할 것 같다. 시간 복잡도면에서 더 효율적인 것이 있을 것 같지가 않았다. (Brute force algorithm) CODE import sys input .. 2022. 12. 30.
[python] 백준 11055 가장 큰 증가 부분 수열 https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 문제 해결 전통적인 dp문제 dp[n]을 n을 마지막으로 포함하는 부분 증가 수열중 합이 가장 큰 수를 나타낸다고 하자. 이 때 들어가는 수열중 n 이전 마지막 수를 i라 할 때 dp[n] = max(dp[i]+A[n], dp[n])이 될 것이다. 따라서 이 것을 생각하고 풀면 끝 CODE import sys input = sys.stdi.. 2022. 12. 29.
[python] 백준 11722 가장 긴 감소하는 부분 수열 https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net 문제 해결 수열에서 부분 수열 중 감소 수열이 되도록 뽑았을 때 가장 긴 수열을 찾는 문제 n번째 수는 뽑힐 수도 있고 안 뽑힐 수도 있음 n번째 수가 뽑힌다고 가정할 때 n-1번까지 수열중 가장 긴 수열에 +1이 되는 것이며 마지막 수보다 n번째 수가 작아야한다. n번째 수를 넣었을 때 가장 긴 수열을 dp[n]이라고 하.. 2022. 12. 29.
[Python] 백준 13398 연속합 2 https://www.acmicpc.net/problem/13398 13398번: 연속합 2 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 해결 리스트안에서 i번째에서 j번째의 합의 최댓값을 구하는 문제 BUT 중간에 하나의 수를 뺄 수 있다. n번째 까지 연속해서 왔을 때 최댓값은 n-1번째까지 수에 영향을 받으므로 dp를 이용하면 좋겠다는 것을 알 수 있다. 이는 처음부터 n 번째 수까지 나열했을 때 n까지 연속해서 오는동안 하나의 수도 안 뺀 최댓값을 dp[n][0], 중간에 하나 뺐으면 dp[n][1]으로 정의한다. 중간에 .. 2022. 12. 28.
728x90