코딩테스트 연습 - 택배 배달과 수거하기 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘 : 그리디, 구현
문제가 길고 복잡했지만 차분히 풀다보니 생각보다 쉽게 풀렸다.
뒤쪽부터 확인하면서 cap만큼 제거하고 0이되면 pop시키는 방식을 사용했다.
ans에는 택배, 수거 중 i+1값이 큰 값을 기준으로 왕복 시간을 계산했다.
function solution(cap, n, deliveries, pickups) {
let ans = 0;
while (deliveries.length || pickups.length) {
// 반복문 한번에 왕복을 계산
// deliveries 확인 -> 멀리있는것 부터 확인
let w = cap;
let dis1 = 0;
let dis2 = 0;
for (let i = deliveries.length - 1; i >= 0; i--) {
if (deliveries[i] !== 0) {
// 왕복 거리 더하기
if (w === cap) dis1 = i + 1;
if (deliveries[i] <= w) {
w -= deliveries[i];
deliveries.pop();
} else {
deliveries[i] -= w;
break;
}
} else deliveries.pop();
}
w = cap;
// 픽업 계산
for (let i = pickups.length - 1; i >= 0; i--) {
if (pickups[i] !== 0) {
// 왕복 거리 더하기
if (w === cap) dis2 = i + 1;
if (pickups[i] <= w) {
w -= pickups[i];
pickups.pop();
} else {
pickups[i] -= w;
break;
}
} else pickups.pop();
}
ans += Math.max(dis1, dis2) * 2;
}
return ans;
}
'코딩테스트(알고리즘) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 마법의 엘리베이터 (Javascript) (0) | 2023.02.12 |
---|---|
[프로그래머스] 이모티콘 할인행사 (Javascript) (0) | 2023.02.10 |
[프로그래머스] 숫자 변환하기 (Javascript) (0) | 2023.02.09 |
[프로그래머스] 뒤에 있는 큰 수 찾기 (Javascript) (0) | 2023.02.09 |
[프로그래머스] 무인도 여행 (Javascript) (0) | 2023.02.09 |