[C++] 백준 2143 - 두 배열의 합
·
알고리즘 문제풀이/백준
https://www.acmicpc.net/problem/2143 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net - 누적 합(Cumulative Sum) - 이분 탐색(Binary Search) 우선 두 배열의 크기가 모두 1000이기 때문에, O(N^2)의 이중for문을 통해 가능한 모든 부분배열의 합의 경우의 수를 Asumcase, Bsumcase에 저장하였다. 그 이후, O(logN)의 lower_bound, upper_bou..
[C++] 프로그래머스 - 연속된 부분 수열의 합
·
알고리즘 문제풀이/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr - 투 포인터 (Two Pointer) - 부분합 (Partial Sum) - 누적합 (Prefix Sum) 1. 주어진 sequence의 이후 덧셈(for문 활용 - 시간복잡도 O(n) 증가)를 줄여주기 위해, 처음부터 누적합의 형식으로 sequence를 저장한다. 2. 배열의 길이가 1,000,000이기 때문에, 모든 부분합을 계산하게 되면(O(n^2)) 시간초과가 발생한다. 따라서 투 포인..