[C++] 백준 2467 - 용액
·
알고리즘 문제풀이/백준
https://www.acmicpc.net/problem/2467 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net - 투 포인터(Two Pointer) - 이분 탐색(Binary Search) 간단한 투 포인터 문제로 보인다. 과정은 이러하다. (1) 용액 배열의 양 끝을 초깃값으로 잡은 뒤, 서로 다가오면서(투포인터) 두 개의 합이 0에 가장 가까울 경우 저장해준다. (2) 두 개의 합이 0 보다 작을 경우, 조금 더 0보다 가까운..
[C++] 백준 1253 - 좋다
·
알고리즘 문제풀이/백준
https://www.acmicpc.net/problem/1253 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net - 이분 탐색 (Binary Search) - 투 포인터 (Two Pointer) 투 포인터를 이용하여, 서로 다른 두 수를 지목했고, 이들의 합을 구했다. 시간복잡도의 경우, - N개의 숫자를 모두 순회해야 하므로 O(N) - 각각의 숫자들이 서로 다른 두 수의 합으로 구할 수 있는지를 구하는 것은 투 포인터로 구현했으므로 O(N) 따라서 O(..
[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)) 시간초과가 발생한다. 따라서 투 포인..