https://school.programmers.co.kr/learn/courses/30/lessons/178870
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
비내림차순으로 정렬된 수열 sequence과 정수k가 주어진다.
합이 k가 되는 부분수열의 시작 인덱스와 끝 인덱스를 구하라
합이 k인 부분수열이 여러개 존재할 경우 길이가 가장 짧은것, 시작 인덱스가 작은 수열을 구한다.
5 <= len(sequence) <= 100,000, 5 <= k <= 100,000,000
투포인터로 접근해야한다는 것은 알았다. 근데 투포인터를 다루는 방법이 미숙했다.
다른분의 풀이를 보고 나의 코드의 문제점을 알게되었다.
1. 만약 sequence의 i번째에 k가 존재한다면 무조건 [i, i]가 정답이다.
2. 부분수열의 합을 구하기 위해 투포인터를 사용한다.
def solution(sequence, k):
answer = [0, 1000001]
start, end, sum_value = 0, 0, 0
for i in range(len(sequence)):
if sequence[i] == k:
return [i, i]
while start < len(sequence):
while end < len(sequence) and sum_value < k:
sum_value += sequence[end]
end += 1
if sum_value == k:
if answer[1] - answer[0] > end - 1 - start:
answer = [start, end - 1]
sum_value -= sequence[start]
start += 1
return answer
[프로그래머스] 172927. 광물 캐기| 그리디 | 파이썬, 소스코드, 정답 (1) | 2023.05.04 |
---|---|
[프로그래머스] 176962. 과제 진행하기 | 구현 | 파이썬, 소스코드, 정답 (0) | 2023.05.03 |
[프로그래머스] 181187. 두 원 사이의 정수 쌍 | 수학 | 파이썬, 소스코드, 정답 (1) | 2023.05.01 |
[프로그래머스] 181188. 요격시스템 | 정렬 | 파이썬, 소스코드, 정답 (1) | 2023.04.30 |
백준 1005 ACM Craft | 파이썬, DP (3) | 2022.02.11 |