728x90
https://school.programmers.co.kr/learn/courses/30/lessons/150369
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 해결방법 찾기
해당 문제는 결국 가장 먼 곳 부터 배달 및 수거가 완료되는것이 낫다고 판단한다.(그리디 알고리즘)
이유는 가장 비효율적인것이 물류창고에서 가장 먼 곳을 가게되는것이라고 보이기 때문이다.
그리고 여기서 감안해야 하는 부분이 기사는 도착지를 여러번 방문할 수 있다는 점이다. 그말은 즉슨 굳이 한번에 배달, 수거를 할 필요가없고 여러번 방문해도 된다는 점이다.
2. 코드 구현하기
class Solution {
public long solution(int cap, int n, int[] deliveries, int[] pickups) {
long answer = 0;
for(int i=n-1; i>=0; i--){
int d=deliveries[i];
int p=pickups[i];
int cnt=0;
while(d>0 || p>0){
d-=cap;
p-=cap;
cnt++;
}
if(i > 0){
if(d < 0) deliveries[i-1]+=d;
if(p < 0) pickups[i-1]+=p;
}
deliveries[i]=d;
pickups[i]=p;
answer+=cnt*2*(i+1);
}
return answer;
}
}
위 코드의 해석은 방문지점만큼 반복문을 돌린다.
해당 지점에서 배달,수거를 최소 몇번해야하는지 찾는다. (cnt변수)
반복을 했을때 배달 ,수거를 할 때 해당지점에서 해도 공간이남는다면(cap) 해당 지점의 전의 구역도 남는공간만큼 배달,수거를 해준다(if(d < 0) deliveries[i-1]+=d; if(p < 0) pickups[i-1]+=p;) 그렇게되면 최소 해당지점을 몇번반복해야하는지 알수있다.
3. 후기
알고리즘을 공부하고있지만, 공부한 내용을 어떻게 유추하고 코딩에 접목시키는지는 다른것같다. 여러번 연습하면서 어떤 상황에 어떤 알고리즘을 사용해야하는지 연구할 필요가 있는것같다.
728x90
반응형
'공부 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 실패율 _javascript (0) | 2022.09.27 |
---|---|
[프로그래머스] [1차] 다트 게임 _javascript (0) | 2022.09.27 |
[프로그래머스] 체육복 _ javascript (0) | 2022.09.27 |
[프로그래머스] 완주하지 못한 선수 _ javascript (0) | 2022.09.26 |
[프로그래머스] 크레인 인형뽑기 _ javascript (1) | 2022.09.26 |