본문 바로가기

부분합2

[백준문제풀이] 1806 부분합 풀이일시 : 2020-12-24 ​ 문제 : 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. ​ ​ 입력 : 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. ex) 10 15 5 1 3 5 10 7 4 9 2 8 ​ ​ 출력 : 첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다. ex) 2 ​ ​ 풀이 : ​ 1. 일반 BP로 풀기 (시.. 2021. 1. 3.
[개념정리] Two pointer algorithm 투포인터 알고리즘 : 1차원 배열이 있고 이 배열에서 각자 다른 원소를 가리키고 있는 두개의 포인터를 조작해서 원하는 인덱스, 값을 얻는 방법 쓰는 이유 : 아래와 같은 문제를 투포인터로 풀이할 수 있다. BP로 풀게된다면 시간복잡도가 O(N^2)가 되어 시간초과가 날 수 있다. https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 사용 방법 : ​ 1. 포인터를 두 개 준비한다. left, right (초기.. 2020. 12. 27.
반응형