[C++] 백준 14002번 : 가장 긴 증가하는 부분 수열 4 (G4)
#문제 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 #풀이 & 학습한 내용 앞서 풀었던 supremo7.tistory.com/92에서 길이만을 구하는 것이 아닌 부분 수열 자체를 출력해줘야 한다. 이때는 추가로 dp배열에서 역추적하는 배열을 만들어 그 전의 index가 어디인지 저장한다. 그리고 재귀를 통해 출력해준다. #소스코드 1 2 3 4 5 6 7 8 9 10 11 ..
[C++] 백준 11053번 : 가장 긴 증가하는 부분 수열 (S2)
#문제 www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net #풀이 & 학습한 내용 시간복잡도를 O(N)으로 구현하려 시도했지만 실패하고 O(N^2)로 구현했다. dp배열에 그 위치를 수열의 마지막으로 갖는 최대 증가하는 부분 수열의 길이를 저장했다. j가 1부터 i까지 움직이며 p[j]dp[i] 조건이 만족되면 갱신되도록 for문을 구성했다. 그리고 문제에서 구하는 최댓값은 dp배열의..
[C++] 백준 15990번 : 1, 2, 3 더하기 5 (S3)
#문제 www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net #풀이 & 학습한 내용 중복이 안 되게 해야 하므로 마지막이 어떤 수인지에 대해 구분을 하여 경우의 수를 저장해주어야 한다. 2차원 배열을 선언하여 마지막에 더해지는 수 1, 2, 3에 대해 그 인덱스에 맞는 곳에 경우의 수를 저장한다. 인덱스를 0부터 해도 되지만 마침 마지막에 더해지는 수가 1 ,2, 3이므로 편하게 인덱스 또한 1,2,3일 때에 해당되도록 해서 헷갈리는 일이 없게 했다. #소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13..