코딩테스트/프로그래머스
[프로그래머스] 연속된 부분 수열의 합
쪼르뚜
2024. 9. 3. 16:55
728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/178870
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
728x90
👩💻 코드
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> sequence, int k) {
int startIndex = 0;
int endIndex = 0;
int sum = sequence[0];
int length = sequence.size();
int start = 0;
int end = 0;
while(endIndex < sequence.size()){
if (sum == k){
if(endIndex - startIndex < length){
start = startIndex;
end = endIndex;
length = end - start;
}
endIndex++;
sum += sequence[endIndex];
} else if (sum > k){
sum -= sequence[startIndex];
startIndex++;
} else {
endIndex++;
sum += sequence[endIndex];
}
}
return { start, end };
}
📝 풀이
⭐ 참고 : 2024.02.29 - [코딩테스트/백준] - [백준] 2018번 : 수들의 합 5
[백준] 2018번 : 수들의 합 5
🔗 문제 링크 https://www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개
jjrdd.tistory.com
이 문제는 투포인터 알고리즘을 통해 풀었습니다.
sum이 k보다 작으면 끝 포인터를 증가시킵니다.
sum이 k보다 크면 시작 포인터를 증가시킵니다.
sum이 k와 같고 길이가 가장 짧은 경우에 start와 end를 수정합니다.
이 과정을 끝 포인터가 sequence 마지막에 도착할 때까지 반복합니다.
최종적으로 start와 end값을 return 합니다.
728x90
반응형