티스토리 뷰
#include <string>
#include <vector>
using namespace std;
long long solution(int cap, int n, vector<int> deliveries, vector<int> pickups) {
long long answer = 0;
long long d = 0, p = 0;
for(int i=n-1; i>=0; i--)
{
int cnt = 0;
d -= deliveries[i];
p -= pickups[i];
while(d<0 || p<0)
{
d += cap;
p += cap;
cnt++;
}
answer += (i+1)*2*cnt;
}
return answer;
}
그리디하게 접근하여 풀 수 있는 문제이다.
배달과 수거에 대한 변수를 따로 두고, 끝에서부터 배달해야 하는 값과 수거해야 하는 값을 체크한다.
이후 반복문을 통해 cap의 수치만큼 더해가며, 배달과 수거 모두 가능할때까지 반복한다.
이때 왕복으로 갔다오게 되므로, 이를 위해 cnt 변수를 카운팅한다.
해당 값을 위해 움직인 값은 경우 현재 인덱스 * 2(왕복) * cnt 일 것이다.
이를 모든 반복문에 대해서 체크해준다.
막상 코드 자체는 간단한 편이지만, 아이디어 및 구상이 쉽지 않아 다른 내용을 참고한 문제이다.
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스 2레벨] 교점에 별 만들기 (C++) (0) | 2025.06.14 |
---|---|
[프로그래머스 2레벨] 아날로그 시계 (C++) (0) | 2025.06.12 |
[프로그래머스 2레벨] 단체사진 찍기 (C++) (0) | 2025.06.10 |
[프로그래머스 2레벨] 카카오프렌즈 컬러링북 (C++) (0) | 2025.06.09 |
[프로그래머스 2레벨] 충돌위험 찾기 (C++) (0) | 2025.06.08 |