arr는 징검다리이고, 각 돌의 내구도이다.
dogs 중에서 무사히 돌다리를 건널 수 있는 dogs들만 반환한다.
징검다리 돌 내구도는 dogs이 지나갈때마다 내구도가 줄어들고,
dogs의 몸무게가 돌의 내구도보다 더 높으면 dogs는 가라 앉는다.
점프력은 dogs이 매번 이동할 수 있는 거리이다.
let arr = [5, 3, 4, 1, 3, 8, 3]
let dogs = [{
"이름" : "루비독",
"나이" : "95년생",
"점프력" : "3",
"몸무게" : "4",
},{
"이름" : "피치독",
"나이" : "95년생",
"점프력" : "3",
"몸무게" : "3",
},{
"이름" : "씨-독",
"나이" : "72년생",
"점프력" : "2",
"몸무게" : "1",
},{
"이름" : "코볼독",
"나이" : "59년생",
"점프력" : "1",
"몸무게" : "1",
},
]
function Crossing(arr, dogs) {
let result = [];
for(let eachDogs of dogs) {
let position = 0;
let fail = false;
while(position < arr.length - 1) {
position += parseInt(eachDogs['점프력'], 10);
arr[position - 1] -= parseInt(eachDogs['몸무게'], 10);
if(arr[position - 1] < 0) {
fail = true;
break;
}
}
if(!fail) {
result.push(eachDogs['이름']);
}
}
return result;
}
while(position < arr.length - 1)
: dogs의 position이 arr의 길이보다 크면 다리를 건넜다는 의미이다.
다리를 건너는 동안 dogs의 arr에서의 위치를 '점프력'을 이용해서 위치를 누적하고,
해당 위치에서 '돌의 내구도' - '몸무게'를 구한뒤에 dogs가 건널지 말지 결정한다.
position += parseInt(eachDogs['점프력'], 10);
: dogs의 위치
arr[position - 1] -= parseInt(eachDogs['몸무게'], 10);
: 돌 내구도 - dogs의 몸무게
if(arr[position - 1] < 0)
: 돌의 내구도가 0보다 작으면, 돌이 없어진 것.
if(!fail)
: 무사히 돌다리를 건넌 dogs들의 이름을 return.