Loading...

[Python] BOJ 1806 - Subsequence(부분합)

https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net # N이 최대 10만이므로 완전탐색으로 구하는것은 시간초과가 난다. 따라서, 투 포인터 알고리즘을 사용하여 풀었다. 1. 처음 부분합 s에 nums[0]을 넣어준다. (첫번째 숫자 그 자체로 S를 넘을 수 있기 때문에) 그리고 포인터 i, j를 0으로 초기화해준다. 2. 만약 현재 부분합 s가 구하고자 하는 S보다 같거나 크면 왼쪽 포인터가 가리키는 nums의 수(nums[i])를 ..

[Python] BOJ 2003 - 수들의 합 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 # 투 포인터 기초문제이다. # left, right라는 포인터 두 개를 이용해 진행한다. 1. left를 0, right를 1로 초기 설정하고 num의 첫번째 값이 s이면 ans를 1부터 시작하고 아니면 s는 0으로 시작한다. 2. while문 안에서 left와 right포인터가 모두 N이라면 둘 다 맨 오른쪽(맨 끝)까지 간 것이므로 break 2-1...