728x90
https://school.programmers.co.kr/learn/courses/30/lessons/178870?language=cpp
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
점진적으로 인덱스를 변경하면서 더하거나 빼거나 하는 해당 문제를 만나면 가장 먼저 떠올려야하는 알고리즘이 두포인터이다.
처음 인덱스 low, hi를 0으로 두고
k보다 sum이 크면 lo를 늘려 전체 값을 줄이고
k보다 sum이 작으면 hi를 늘려서 전체 값을 늘려서 정답을 갱신해나가면 된다.
여기서는 가장 짧아야하므로
정답 판정 근거에 길이를 넣으면 쉽게 코드를 구현할 수 있다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int prefix[1000001];
vector<int> solution(vector<int> sequence, int k) {
vector<int> answer;
answer.push_back(0);
answer.push_back(1000000000);
int lo = 0;
int hi = 0;
int sum = sequence[0];
while(hi < sequence.size()) {
if(sum == k) {
if(answer[1] - answer[0] > hi - lo) {
answer[0] = lo;
answer[1] = hi;
}
sum -= sequence[lo];
lo++;
hi++;
sum += sequence[hi];
} else {
if(sum > k) {
sum -= sequence[lo];
lo++;
} else {
hi++;
sum += sequence[hi];
}
}
}
return answer;
}

'프로그래머스 풀이 > Lv 2' 카테고리의 다른 글
| [프로그래머스] 리코쳇 로봇 (C++) (0) | 2026.06.04 |
|---|---|
| [프로그래머스] 입양 시각 구하기(1) (ORACLE) (0) | 2026.04.05 |
| [프로그래머스LV2] 뒤에 있는 큰 수 찾기(Java) (0) | 2024.10.30 |
| [프로그래머스 LV2] 다리를 지나는 트럭 (C++) (0) | 2024.10.26 |
| [프로그래머스LV2] 땅따먹기 (C++) (0) | 2024.10.25 |